Merge branch 'tk/stripspace' into maint
authorJunio C Hamano <gitster@pobox.com>
Tue, 3 Nov 2015 23:32:26 +0000 (15:32 -0800)
committerJunio C Hamano <gitster@pobox.com>
Tue, 3 Nov 2015 23:32:26 +0000 (15:32 -0800)
The internal stripspace() function has been moved to where it
logically belongs to, i.e. strbuf API, and the command line parser
of "git stripspace" has been updated to use the parse_options API.

* tk/stripspace:
stripspace: use parse-options for command-line parsing
strbuf: make stripspace() part of strbuf

66 files changed:
Documentation/RelNotes/2.6.2.txt [new file with mode: 0644]
Documentation/config.txt
Documentation/git-am.txt
Documentation/git-bisect-lk2009.txt
Documentation/git-cherry-pick.txt
Documentation/git-commit-tree.txt
Documentation/git-commit.txt
Documentation/git-gc.txt
Documentation/git-grep.txt
Documentation/git-interpret-trailers.txt
Documentation/git-log.txt
Documentation/git-ls-remote.txt
Documentation/git-merge.txt
Documentation/git-notes.txt
Documentation/git-rebase.txt
Documentation/git-revert.txt
Documentation/git-status.txt
Documentation/git-tag.txt
Documentation/git.txt
Documentation/pretty-options.txt
Documentation/technical/repository-version.txt [new file with mode: 0644]
Documentation/user-manual.txt
GIT-VERSION-GEN
Makefile
RelNotes
advice.c
builtin/am.c
builtin/blame.c
builtin/fsck.c
builtin/gc.c
builtin/ls-remote.c
builtin/prune.c
builtin/pull.c
builtin/repack.c
cache.h
connect.c
contrib/examples/git-pull.sh
dir.c
environment.c
git-filter-branch.sh
git-rebase--interactive.sh
pager.c
path.c
po/ru.po
quote.c
reachable.c
run-command.c
run-command.h
setup.c
t/annotate-tests.sh
t/perf/aggregate.perl
t/t1302-repo-version.sh
t/t1450-fsck.sh
t/t2026-prune-linked-checkouts.sh [deleted file]
t/t2026-worktree-prune.sh [new file with mode: 0755]
t/t3203-branch-output.sh
t/t3301-notes.sh
t/t3404-rebase-interactive.sh
t/t5507-remote-environment.sh [new file with mode: 0755]
t/t5560-http-backend-noserver.sh
t/t5561-http-backend.sh
t/t556x_common
t/t6500-gc.sh
t/t7003-filter-branch.sh
test-path-utils.c
wt-status.c
diff --git a/Documentation/RelNotes/2.6.2.txt b/Documentation/RelNotes/2.6.2.txt
new file mode 100644 (file)
index 0000000..5b65e35
--- /dev/null
@@ -0,0 +1,65 @@
+Git v2.6.2 Release Notes
+========================
+
+Fixes since v2.6.1
+------------------
+
+ * There were some classes of errors that "git fsck" diagnosed to its
+   standard error that did not cause it to exit with non-zero status.
+
+ * A test script for the HTTP service had a timing dependent bug,
+   which was fixed.
+
+ * Performance-measurement tests did not work without an installed Git.
+
+ * On a case insensitive filesystems, setting GIT_WORK_TREE variable
+   using a random cases that does not agree with what the filesystem
+   thinks confused Git that it wasn't inside the working tree.
+
+ * When "git am" was rewritten as a built-in, it stopped paying
+   attention to user.signingkey, which was fixed.
+
+ * After "git checkout --detach", "git status" reported a fairly
+   useless "HEAD detached at HEAD", instead of saying at which exact
+   commit.
+
+ * "git rebase -i" had a minor regression recently, which stopped
+   considering a line that begins with an indented '#' in its insn
+   sheet not a comment, which is now fixed.
+
+ * Description of the "log.follow" configuration variable in "git log"
+   documentation is now also copied to "git config" documentation.
+
+ * Allocation related functions and stdio are unsafe things to call
+   inside a signal handler, and indeed killing the pager can cause
+   glibc to deadlock waiting on allocation mutex as our signal handler
+   tries to free() some data structures in wait_for_pager().  Reduce
+   these unsafe calls.
+
+ * The way how --ref/--notes to specify the notes tree reference are
+   DWIMmed was not clearly documented.
+
+ * Customization to change the behaviour with "make -w" and "make -s"
+   in our Makefile was broken when they were used together.
+
+ * The Makefile always runs the library archiver with hardcoded "crs"
+   options, which was inconvenient for exotic platforms on which
+   people want to use programs with totally different set of command
+   line options.
+
+ * The ssh transport, just like any other transport over the network,
+   did not clear GIT_* environment variables, but it is possible to
+   use SendEnv and AcceptEnv to leak them to the remote invocation of
+   Git, which is not a good idea at all.  Explicitly clear them just
+   like we do for the local transport.
+
+ * "git blame --first-parent v1.0..v2.0" was not rejected but did not
+   limit the blame to commits on the first parent chain.
+
+ * Very small number of options take a parameter that is optional
+   (which is not a great UI element as they can only appear at the end
+   of the command line).  Add notice to documentation of each and
+   every one of them.
+
+Also contains typofixes, documentation updates and trivial code
+clean-ups.
index 0cc87a6f6565bbe794420bc47be8407e4ac47f22..fec0dea5d03343b40caf35ea6de6753049f08d35 100644 (file)
@@ -1840,6 +1840,12 @@ log.decorate::
        specified, the full ref name (including prefix) will be printed.
        This is the same as the log commands '--decorate' option.
 
+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`,
+       i.e. it cannot be used to follow multiple files and does not work well
+       on non-linear history.
+
 log.showRoot::
        If true, the initial commit will be shown as a big creation event.
        This is equivalent to a diff against an empty tree.
index dbea6e7ae9131a1e5c51dec460d58cc6deda701b..452c1feb2319a3ac47836b5039ebeba519be3c87 100644 (file)
@@ -141,7 +141,9 @@ default.   You can use `--no-utf8` to override this.
 
 -S[<keyid>]::
 --gpg-sign[=<keyid>]::
-       GPG-sign commits.
+       GPG-sign commits. The `keyid` argument is optional and
+       defaults to the committer identity; if specified, it must be
+       stuck to the option without a space.
 
 --continue::
 -r::
index 0f0c6ff0829dfab3bd45b34b76a5b489f648eba9..c06efbd42a6c1010f0a5ec17ba460e0ebcd91d9d 100644 (file)
@@ -1321,7 +1321,7 @@ So git bisect is unconditional goodness - and feel free to quote that
 _____________
 
 Acknowledgments
-----------------
+---------------
 
 Many thanks to Junio Hamano for his help in reviewing this paper, for
 reviewing the patches I sent to the Git mailing list, for discussing
index 1147c71da605c1f5779835137fb6bab5e2c349a6..77da29a474518c56c7dab23f5921aa50566506dd 100644 (file)
@@ -9,7 +9,7 @@ SYNOPSIS
 --------
 [verse]
 'git cherry-pick' [--edit] [-n] [-m parent-number] [-s] [-x] [--ff]
-                 [-S[<key-id>]] <commit>...
+                 [-S[<keyid>]] <commit>...
 'git cherry-pick' --continue
 'git cherry-pick' --quit
 'git cherry-pick' --abort
@@ -101,9 +101,11 @@ effect to your index in a row.
 --signoff::
        Add Signed-off-by line at the end of the commit message.
 
--S[<key-id>]::
---gpg-sign[=<key-id>]::
-       GPG-sign commits.
+-S[<keyid>]::
+--gpg-sign[=<keyid>]::
+       GPG-sign commits. The `keyid` argument is optional and
+       defaults to the committer identity; if specified, it must be
+       stuck to the option without a space.
 
 --ff::
        If the current HEAD is the same as the parent of the
index f5f2a8d326502714299cf85d9819bb065d5af390..a0b5457304008cec1cf728e5ac168c5f547173eb 100644 (file)
@@ -56,7 +56,9 @@ OPTIONS
 
 -S[<keyid>]::
 --gpg-sign[=<keyid>]::
-       GPG-sign commit.
+       GPG-sign commits. The `keyid` argument is optional and
+       defaults to the committer identity; if specified, it must be
+       stuck to the option without a space.
 
 --no-gpg-sign::
        Countermand `commit.gpgSign` configuration variable that is
index 904dafa0f7070fc438f138393a3b356542ae04d9..7f34a5b33103ed1c870f234687079badc393be77 100644 (file)
@@ -13,7 +13,7 @@ SYNOPSIS
           [-F <file> | -m <msg>] [--reset-author] [--allow-empty]
           [--allow-empty-message] [--no-verify] [-e] [--author=<author>]
           [--date=<date>] [--cleanup=<mode>] [--[no-]status]
-          [-i | -o] [-S[<key-id>]] [--] [<file>...]
+          [-i | -o] [-S[<keyid>]] [--] [<file>...]
 
 DESCRIPTION
 -----------
@@ -314,7 +314,9 @@ changes to tracked files.
 
 -S[<keyid>]::
 --gpg-sign[=<keyid>]::
-       GPG-sign commit.
+       GPG-sign commits. The `keyid` argument is optional and
+       defaults to the committer identity; if specified, it must be
+       stuck to the option without a space.
 
 --no-gpg-sign::
        Countermand `commit.gpgSign` configuration variable that is
index 52234987f9993a0b9f6d3f50ce9b26e074f3b58d..fa1510480a1d55236f2c467a0d4e901bbc60dc84 100644 (file)
@@ -63,8 +63,11 @@ automatic consolidation of packs.
 --prune=<date>::
        Prune loose objects older than date (default is 2 weeks ago,
        overridable by the config variable `gc.pruneExpire`).
-       --prune=all prunes loose objects regardless of their age.
-       --prune is on by default.
+       --prune=all prunes loose objects regardless of their age (do
+       not use --prune=all unless you know exactly what you are doing.
+       Unless the repository is quiescent, you will lose newly created
+       objects that haven't been anchored with the refs and end up
+       corrupting your repository).  --prune is on by default.
 
 --no-prune::
        Do not prune any loose objects.
index 31811f16bdaac49d01d38dcdea82bb191942b1cf..4a44d6da13cb749759f9d6164b88974ba55485ab 100644 (file)
@@ -160,12 +160,15 @@ OPTIONS
        For better compatibility with 'git diff', `--name-only` is a
        synonym for `--files-with-matches`.
 
--O [<pager>]::
---open-files-in-pager [<pager>]::
+-O[<pager>]::
+--open-files-in-pager[=<pager>]::
        Open the matching files in the pager (not the output of 'grep').
        If the pager happens to be "less" or "vi", and the user
        specified only one pattern, the first file is positioned at
-       the first match automatically.
+       the first match automatically. The `pager` argument is
+       optional; if specified, it must be stuck to the option
+       without a space. If `pager` is unspecified, the default pager
+       will be used (see `core.pager` in linkgit:git-config[1]).
 
 -z::
 --null::
index d6d9231b506b6a6918b4b7a342b33351eafd7e97..0ecd497c4de77ea2ed7afc5603b4bcbd8558d174 100644 (file)
@@ -67,7 +67,7 @@ OPTIONS
 --trim-empty::
        If the <value> part of any trailer contains only whitespace,
        the whole trailer will be removed from the resulting message.
-       This apply to existing trailers as well as new trailers.
+       This applies to existing trailers as well as new trailers.
 
 --trailer <token>[(=|:)<value>]::
        Specify a (<token>, <value>) pair that should be applied as a
index 97b9993ee8c2aeef504e96a041424e1d396a75d8..03f958029ad7a35ec29f111217cd76ba21de9b5e 100644 (file)
@@ -185,10 +185,10 @@ log.date::
        dates like `Sat May 8 19:35:34 2010 -0500`.
 
 log.follow::
-       If a single <path> is given to git log, it will act as
-       if the `--follow` option was also used.  This has the same
-       limitations as `--follow`, i.e. it cannot be used to follow
-       multiple files and does not work well on non-linear history.
+       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`,
+       i.e. it cannot be used to follow multiple files and does not work well
+       on non-linear history.
 
 log.showRoot::
        If `false`, `git log` and related commands will not treat the
index 2e22915eb857bd960f09afc725107198642bfd22..d510c05e11d3cbfb7fd1393331306e70bb7645db 100644 (file)
@@ -9,7 +9,7 @@ git-ls-remote - List references in a remote repository
 SYNOPSIS
 --------
 [verse]
-'git ls-remote' [--heads] [--tags]  [-u <exec> | --upload-pack <exec>]
+'git ls-remote' [--heads] [--tags]  [--upload-pack=<exec>]
              [--exit-code] <repository> [<refs>...]
 
 DESCRIPTION
@@ -29,7 +29,6 @@ OPTIONS
        both, references stored in refs/heads and refs/tags are
        displayed.
 
--u <exec>::
 --upload-pack=<exec>::
        Specify the full path of 'git-upload-pack' on the remote
        host. This allows listing references from repositories accessed via
index a62d6729b94963787ad435c486e1dc419c776012..07f7295ec8b603fcbd907e780d4ed1109ac5b358 100644 (file)
@@ -10,7 +10,7 @@ SYNOPSIS
 --------
 [verse]
 'git merge' [-n] [--stat] [--no-commit] [--squash] [--[no-]edit]
-       [-s <strategy>] [-X <strategy-option>] [-S[<key-id>]]
+       [-s <strategy>] [-X <strategy-option>] [-S[<keyid>]]
        [--[no-]rerere-autoupdate] [-m <msg>] [<commit>...]
 'git merge' <msg> HEAD <commit>...
 'git merge' --abort
@@ -67,7 +67,9 @@ include::merge-options.txt[]
 
 -S[<keyid>]::
 --gpg-sign[=<keyid>]::
-       GPG-sign the resulting merge commit.
+       GPG-sign the resulting merge commit. The `keyid` argument is
+       optional and defaults to the committer identity; if specified,
+       it must be stuck to the option without a space.
 
 -m <msg>::
        Set the commit message to be used for the merge commit (in
index a9a916f360ec9efb8a801acc982ba39a38f41cf5..8de349968a3be4ea7e65a4a254041b0f0fb63347 100644 (file)
@@ -162,7 +162,9 @@ OPTIONS
 --ref <ref>::
        Manipulate the notes tree in <ref>.  This overrides
        'GIT_NOTES_REF' and the "core.notesRef" configuration.  The ref
-       is taken to be in `refs/notes/` if it is not qualified.
+       specifies the full refname when it begins with `refs/notes/`; when it
+       begins with `notes/`, `refs/` and otherwise `refs/notes/` is prefixed
+       to form a full name of the ref.
 
 --ignore-missing::
        Do not consider it an error to request removing notes from an
index ca039546a463bee511ca3a1c7d301689fb56a412..bccfdf7fde9af8c80203f85d98030f8f38db4994 100644 (file)
@@ -294,7 +294,9 @@ which makes little sense.
 
 -S[<keyid>]::
 --gpg-sign[=<keyid>]::
-       GPG-sign commits.
+       GPG-sign commits. The `keyid` argument is optional and
+       defaults to the committer identity; if specified, it must be
+       stuck to the option without a space.
 
 -q::
 --quiet::
index cceb5f2f7fa0c41174215901a091158161d89bc3..b15139ffdcda488c9e2314540885965723292a48 100644 (file)
@@ -8,7 +8,7 @@ git-revert - Revert some existing commits
 SYNOPSIS
 --------
 [verse]
-'git revert' [--[no-]edit] [-n] [-m parent-number] [-s] [-S[<key-id>]] <commit>...
+'git revert' [--[no-]edit] [-n] [-m parent-number] [-s] [-S[<keyid>]] <commit>...
 'git revert' --continue
 'git revert' --quit
 'git revert' --abort
@@ -80,9 +80,11 @@ more details.
 This is useful when reverting more than one commits'
 effect to your index in a row.
 
--S[<key-id>]::
---gpg-sign[=<key-id>]::
-       GPG-sign commits.
+-S[<keyid>]::
+--gpg-sign[=<keyid>]::
+       GPG-sign commits. The `keyid` argument is optional and
+       defaults to the committer identity; if specified, it must be
+       stuck to the option without a space.
 
 -s::
 --signoff::
index 335f3123353482cfd708420dac3b766f181e89ff..e1e8f57cdd217b43b9b04bc54381e9b155d9cbde 100644 (file)
@@ -53,8 +53,9 @@ OPTIONS
 --untracked-files[=<mode>]::
        Show untracked files.
 +
-The mode parameter is optional (defaults to 'all'), and is used to
-specify the handling of untracked files.
+The mode parameter is used to specify the handling of untracked files.
+It is optional: it defaults to 'all', and if specified, it must be
+stuck to the option (e.g. `-uno`, but not `-u no`).
 +
 The possible options are:
 +
index 84f6496bf228454acaa04e570f7857ba1975cda4..08b4dfbf1b049a3fc3cd04edc573845e0c976a9c 100644 (file)
@@ -9,7 +9,7 @@ git-tag - Create, list, delete or verify a tag object signed with GPG
 SYNOPSIS
 --------
 [verse]
-'git tag' [-a | -s | -u <key-id>] [-f] [-m <msg> | -F <file>]
+'git tag' [-a | -s | -u <keyid>] [-f] [-m <msg> | -F <file>]
        <tagname> [<commit> | <object>]
 'git tag' -d <tagname>...
 'git tag' [-n[<num>]] -l [--contains <commit>] [--points-at <object>]
@@ -24,19 +24,19 @@ to delete, list or verify tags.
 
 Unless `-f` is given, the named tag must not yet exist.
 
-If one of `-a`, `-s`, or `-u <key-id>` is passed, the command
+If one of `-a`, `-s`, or `-u <keyid>` is passed, the command
 creates a 'tag' object, and requires a tag message.  Unless
 `-m <msg>` or `-F <file>` is given, an editor is started for the user to type
 in the tag message.
 
-If `-m <msg>` or `-F <file>` is given and `-a`, `-s`, and `-u <key-id>`
+If `-m <msg>` or `-F <file>` is given and `-a`, `-s`, and `-u <keyid>`
 are absent, `-a` is implied.
 
 Otherwise just a tag reference for the SHA-1 object name of the commit object is
 created (i.e. a lightweight tag).
 
 A GnuPG signed tag object will be created when `-s` or `-u
-<key-id>` is used.  When `-u <key-id>` is not used, the
+<keyid>` is used.  When `-u <keyid>` is not used, the
 committer identity for the current user is used to find the
 GnuPG key for signing.         The configuration variable `gpg.program`
 is used to specify custom GnuPG binary.
@@ -63,8 +63,8 @@ OPTIONS
 --sign::
        Make a GPG-signed tag, using the default e-mail address's key.
 
--u <key-id>::
---local-user=<key-id>::
+-u <keyid>::
+--local-user=<keyid>::
        Make a GPG-signed tag, using the given key.
 
 -f::
@@ -125,14 +125,14 @@ This option is only applicable when listing tags without annotation lines.
        Use the given tag message (instead of prompting).
        If multiple `-m` options are given, their values are
        concatenated as separate paragraphs.
-       Implies `-a` if none of `-a`, `-s`, or `-u <key-id>`
+       Implies `-a` if none of `-a`, `-s`, or `-u <keyid>`
        is given.
 
 -F <file>::
 --file=<file>::
        Take the tag message from the given file.  Use '-' to
        read the message from the standard input.
-       Implies `-a` if none of `-a`, `-s`, or `-u <key-id>`
+       Implies `-a` if none of `-a`, `-s`, or `-u <keyid>`
        is given.
 
 --cleanup=<mode>::
@@ -166,7 +166,7 @@ it in the repository configuration as follows:
 
 -------------------------------------
 [user]
-    signingKey = <gpg-key-id>
+    signingKey = <gpg-keyid>
 -------------------------------------
 
 
index 1a426311175941f66efa1865f3a03c63956060fe..4585103f996c0e68753520ad5064a1a9879054c8 100644 (file)
@@ -43,9 +43,10 @@ unreleased) version of Git, that is available from the 'master'
 branch of the `git.git` repository.
 Documentation for older releases are available here:
 
-* link:v2.6.1/git.html[documentation for release 2.6.1]
+* link:v2.6.2/git.html[documentation for release 2.6.2]
 
 * release notes for
+  link:RelNotes/2.6.2.txt[2.6.2],
   link:RelNotes/2.6.1.txt[2.6.1],
   link:RelNotes/2.6.0.txt[2.6].
 
index 8d6c5cec4c5edc904a5f2d7595fd8943457f550d..4b659ac1a6a6c1b57d0cadc5cd69ce6b69525cc1 100644 (file)
@@ -55,8 +55,9 @@ By default, the notes shown are from the notes refs listed in the
 environment overrides). See linkgit:git-config[1] for more details.
 +
 With an optional '<ref>' argument, show this notes ref instead of the
-default notes ref(s). The ref is taken to be in `refs/notes/` if it
-is not qualified.
+default notes ref(s). The ref specifies the full refname when it begins
+with `refs/notes/`; when it begins with `notes/`, `refs/` and otherwise
+`refs/notes/` is prefixed to form a full name of the ref.
 +
 Multiple --notes options can be combined to control which notes are
 being displayed. Examples: "--notes=foo" will show only notes from
diff --git a/Documentation/technical/repository-version.txt b/Documentation/technical/repository-version.txt
new file mode 100644 (file)
index 0000000..00ad379
--- /dev/null
@@ -0,0 +1,88 @@
+Git Repository Format Versions
+==============================
+
+Every git repository is marked with a numeric version in the
+`core.repositoryformatversion` key of its `config` file. This version
+specifies the rules for operating on the on-disk repository data. An
+implementation of git which does not understand a particular version
+advertised by an on-disk repository MUST NOT operate on that repository;
+doing so risks not only producing wrong results, but actually losing
+data.
+
+Because of this rule, version bumps should be kept to an absolute
+minimum. Instead, we generally prefer these strategies:
+
+  - bumping format version numbers of individual data files (e.g.,
+    index, packfiles, etc). This restricts the incompatibilities only to
+    those files.
+
+  - introducing new data that gracefully degrades when used by older
+    clients (e.g., pack bitmap files are ignored by older clients, which
+    simply do not take advantage of the optimization they provide).
+
+A whole-repository format version bump should only be part of a change
+that cannot be independently versioned. For instance, if one were to
+change the reachability rules for objects, or the rules for locking
+refs, that would require a bump of the repository format version.
+
+Note that this applies only to accessing the repository's disk contents
+directly. An older client which understands only format `0` may still
+connect via `git://` to a repository using format `1`, as long as the
+server process understands format `1`.
+
+The preferred strategy for rolling out a version bump (whether whole
+repository or for a single file) is to teach git to read the new format,
+and allow writing the new format with a config switch or command line
+option (for experimentation or for those who do not care about backwards
+compatibility with older gits). Then after a long period to allow the
+reading capability to become common, we may switch to writing the new
+format by default.
+
+The currently defined format versions are:
+
+Version `0`
+-----------
+
+This is the format defined by the initial version of git, including but
+not limited to the format of the repository directory, the repository
+configuration file, and the object and ref storage. Specifying the
+complete behavior of git is beyond the scope of this document.
+
+Version `1`
+-----------
+
+This format is identical to version `0`, with the following exceptions:
+
+  1. When reading the `core.repositoryformatversion` variable, a git
+     implementation which supports version 1 MUST also read any
+     configuration keys found in the `extensions` section of the
+     configuration file.
+
+  2. If a version-1 repository specifies any `extensions.*` keys that
+     the running git has not implemented, the operation MUST NOT
+     proceed. Similarly, if the value of any known key is not understood
+     by the implementation, the operation MUST NOT proceed.
+
+Note that if no extensions are specified in the config file, then
+`core.repositoryformatversion` SHOULD be set to `0` (setting it to `1`
+provides no benefit, and makes the repository incompatible with older
+implementations of git).
+
+This document will serve as the master list for extensions. Any
+implementation wishing to define a new extension should make a note of
+it here, in order to claim the name.
+
+The defined extensions are:
+
+`noop`
+~~~~~~
+
+This extension does not change git's behavior at all. It is useful only
+for testing format-1 compatibility.
+
+`preciousObjects`
+~~~~~~~~~~~~~~~~~
+
+When the config key `extensions.preciousObjects` is set to `true`,
+objects in the repository MUST NOT be deleted (e.g., by `git-prune` or
+`git repack -d`).
index 68978f53381baf1b179b70f22e97084893d5c227..1b7987e73767f1c71d777909f3b275b5976419aa 100644 (file)
@@ -3424,7 +3424,7 @@ just missing one particular blob version.
 
 [[the-index]]
 The index
------------
+---------
 
 The index is a binary file (generally kept in `.git/index`) containing a
 sorted list of path names, each with permissions and the SHA-1 of a blob
index e1aba8533f5b6d63ac01fb06961843a8f32f75e9..787670926a1283864ccd4a04379a939ff36e51aa 100755 (executable)
@@ -1,7 +1,7 @@
 #!/bin/sh
 
 GVF=GIT-VERSION-FILE
-DEF_VER=v2.6.1
+DEF_VER=v2.6.2
 
 LF='
 '
index 8d5df7ea1ee672753e2f29302ef9a1a7db77638e..04c223102346c209bad78550723027543cffe7d1 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -375,6 +375,9 @@ ALL_CFLAGS = $(CPPFLAGS) $(CFLAGS)
 ALL_LDFLAGS = $(LDFLAGS)
 STRIP ?= strip
 
+# Create as necessary, replace existing, make ranlib unneeded.
+ARFLAGS = rcs
+
 # Among the variables below, these:
 #   gitexecdir
 #   template_dir
@@ -1465,13 +1468,13 @@ endif
 QUIET_SUBDIR0  = +$(MAKE) -C # space to separate -C and subdir
 QUIET_SUBDIR1  =
 
-ifneq ($(findstring $(MAKEFLAGS),w),w)
+ifneq ($(findstring w,$(MAKEFLAGS)),w)
 PRINT_DIR = --no-print-directory
 else # "make -w"
 NO_SUBDIR = :
 endif
 
-ifneq ($(findstring $(MAKEFLAGS),s),s)
+ifneq ($(findstring s,$(MAKEFLAGS)),s)
 ifndef V
        QUIET_CC       = @echo '   ' CC $@;
        QUIET_AR       = @echo '   ' AR $@;
@@ -1995,13 +1998,13 @@ $(REMOTE_CURL_PRIMARY): remote-curl.o http.o http-walker.o GIT-LDFLAGS $(GITLIBS
                $(LIBS) $(CURL_LIBCURL) $(EXPAT_LIBEXPAT)
 
 $(LIB_FILE): $(LIB_OBJS)
-       $(QUIET_AR)$(RM) $@ && $(AR) rcs $@ $^
+       $(QUIET_AR)$(RM) $@ && $(AR) $(ARFLAGS) $@ $^
 
 $(XDIFF_LIB): $(XDIFF_OBJS)
-       $(QUIET_AR)$(RM) $@ && $(AR) rcs $@ $^
+       $(QUIET_AR)$(RM) $@ && $(AR) $(ARFLAGS) $@ $^
 
 $(VCSSVN_LIB): $(VCSSVN_OBJS)
-       $(QUIET_AR)$(RM) $@ && $(AR) rcs $@ $^
+       $(QUIET_AR)$(RM) $@ && $(AR) $(ARFLAGS) $@ $^
 
 export DEFAULT_EDITOR DEFAULT_PAGER
 
index def6ebd43038cd537c2e34617d479d48cc40361c..022358074dff1b5fee7d1d9c354b64a048041226 120000 (symlink)
--- a/RelNotes
+++ b/RelNotes
@@ -1 +1 @@
-Documentation/RelNotes/2.6.1.txt
\ No newline at end of file
+Documentation/RelNotes/2.6.2.txt
\ No newline at end of file
index 4965686e19cbb44b86d48363f8f3e289bebef94d..4dc5cf10a8533b1bfc3bd1483e91df115aa8f868 100644 (file)
--- a/advice.c
+++ b/advice.c
@@ -100,7 +100,7 @@ void NORETURN die_conclude_merge(void)
 {
        error(_("You have not concluded your merge (MERGE_HEAD exists)."));
        if (advice_resolve_conflict)
-               advise(_("Please, commit your changes before you can merge."));
+               advise(_("Please, commit your changes before merging."));
        die(_("Exiting because of unfinished merge."));
 }
 
index fbe9152911e32f4db4391a068051c6e1c1170cd1..7b8e11eeaa366c02aa0bf88017ed0af7b12162fb 100644 (file)
@@ -2208,6 +2208,17 @@ enum resume_mode {
        RESUME_ABORT
 };
 
+static int git_am_config(const char *k, const char *v, void *cb)
+{
+       int status;
+
+       status = git_gpg_config(k, v, NULL);
+       if (status)
+               return status;
+
+       return git_default_config(k, v, NULL);
+}
+
 int cmd_am(int argc, const char **argv, const char *prefix)
 {
        struct am_state state;
@@ -2308,7 +2319,7 @@ int cmd_am(int argc, const char **argv, const char *prefix)
                OPT_END()
        };
 
-       git_config(git_default_config, NULL);
+       git_config(git_am_config, NULL);
 
        am_state_init(&state, git_path("rebase-apply"));
 
index 245d253d041021429265eb81fb008e528613af34..295ce92da5df25a9082b868e848ee9634145e636 100644 (file)
@@ -1371,8 +1371,15 @@ static void pass_whole_blame(struct scoreboard *sb,
  */
 static struct commit_list *first_scapegoat(struct rev_info *revs, struct commit *commit)
 {
-       if (!reverse)
+       if (!reverse) {
+               if (revs->first_parent_only &&
+                   commit->parents &&
+                   commit->parents->next) {
+                       free_commit_list(commit->parents->next);
+                       commit->parents->next = NULL;
+               }
                return commit->parents;
+       }
        return lookup_decoration(&revs->children, &commit->object);
 }
 
@@ -2685,6 +2692,8 @@ int cmd_blame(int argc, const char **argv, const char *prefix)
        }
        else if (contents_from)
                die("--contents and --children do not blend well.");
+       else if (revs.first_parent_only)
+               die("combining --first-parent and --reverse is not supported");
        else {
                final_commit_name = prepare_initial(&sb);
                sb.commits.compare = compare_commits_by_reverse_commit_date;
index 079470342fc926b97ae1c065d37926cf5a449101..b9a74f0cf6e169073994e466110fd1bde9febba7 100644 (file)
@@ -38,6 +38,7 @@ static int show_dangling = 1;
 #define ERROR_OBJECT 01
 #define ERROR_REACHABLE 02
 #define ERROR_PACK 04
+#define ERROR_REFS 010
 
 #ifdef NO_D_INO_IN_DIRENT
 #define SORT_DIRENT 0
@@ -521,8 +522,10 @@ static int fsck_handle_ref(const char *refname, const struct object_id *oid,
                /* We'll continue with the rest despite the error.. */
                return 0;
        }
-       if (obj->type != OBJ_COMMIT && is_branch(refname))
+       if (obj->type != OBJ_COMMIT && is_branch(refname)) {
                error("%s: not a commit", refname);
+               errors_found |= ERROR_REFS;
+       }
        default_refs++;
        obj->used = 1;
        mark_object_reachable(obj);
@@ -585,17 +588,23 @@ static int fsck_head_link(void)
                fprintf(stderr, "Checking HEAD link\n");
 
        head_points_at = resolve_ref_unsafe("HEAD", 0, head_oid.hash, &flag);
-       if (!head_points_at)
+       if (!head_points_at) {
+               errors_found |= ERROR_REFS;
                return error("Invalid HEAD");
+       }
        if (!strcmp(head_points_at, "HEAD"))
                /* detached HEAD */
                null_is_error = 1;
-       else if (!starts_with(head_points_at, "refs/heads/"))
+       else if (!starts_with(head_points_at, "refs/heads/")) {
+               errors_found |= ERROR_REFS;
                return error("HEAD points to something strange (%s)",
                             head_points_at);
+       }
        if (is_null_oid(&head_oid)) {
-               if (null_is_error)
+               if (null_is_error) {
+                       errors_found |= ERROR_REFS;
                        return error("HEAD: detached HEAD points at nothing");
+               }
                fprintf(stderr, "notice: HEAD points to an unborn branch (%s)\n",
                        head_points_at + 11);
        }
@@ -615,6 +624,7 @@ static int fsck_cache_tree(struct cache_tree *it)
                if (!obj) {
                        error("%s: invalid sha1 pointer in cache-tree",
                              sha1_to_hex(it->sha1));
+                       errors_found |= ERROR_REFS;
                        return 1;
                }
                obj->used = 1;
index 0ad8d30b56f89a9ea6ac3a9ee5ae4593ae9754a0..b757d9ae4fdff0d0834cc1c94f9c3595541d54c1 100644 (file)
@@ -340,15 +340,17 @@ int cmd_gc(int argc, const char **argv, const char *prefix)
        if (gc_before_repack())
                return -1;
 
-       if (run_command_v_opt(repack.argv, RUN_GIT_CMD))
-               return error(FAILED_RUN, repack.argv[0]);
-
-       if (prune_expire) {
-               argv_array_push(&prune, prune_expire);
-               if (quiet)
-                       argv_array_push(&prune, "--no-progress");
-               if (run_command_v_opt(prune.argv, RUN_GIT_CMD))
-                       return error(FAILED_RUN, prune.argv[0]);
+       if (!repository_format_precious_objects) {
+               if (run_command_v_opt(repack.argv, RUN_GIT_CMD))
+                       return error(FAILED_RUN, repack.argv[0]);
+
+               if (prune_expire) {
+                       argv_array_push(&prune, prune_expire);
+                       if (quiet)
+                               argv_array_push(&prune, "--no-progress");
+                       if (run_command_v_opt(prune.argv, RUN_GIT_CMD))
+                               return error(FAILED_RUN, prune.argv[0]);
+               }
        }
 
        if (prune_worktrees_expire) {
index 4554dbc8a98c0daaa67c8ea65f5ddf5c48f19383..5e9d5450b79713524eeeb981e4685725951cd9d2 100644 (file)
@@ -4,7 +4,7 @@
 #include "remote.h"
 
 static const char ls_remote_usage[] =
-"git ls-remote [--heads] [--tags]  [-u <exec> | --upload-pack <exec>]\n"
+"git ls-remote [--heads] [--tags]  [--upload-pack=<exec>]\n"
 "                     [-q | --quiet] [--exit-code] [--get-url] [<repository> [<refs>...]]";
 
 /*
index 10b03d3e4cb5ced78118251ac390dd6a33f9a71b..8f4f0522856b988a8798fd65c6d81d8826709aa2 100644 (file)
@@ -119,6 +119,9 @@ int cmd_prune(int argc, const char **argv, const char *prefix)
 
        argc = parse_options(argc, argv, prefix, options, prune_usage, 0);
 
+       if (repository_format_precious_objects)
+               die(_("cannot prune in a precious-objects repo"));
+
        while (argc--) {
                unsigned char sha1[20];
                const char *name = *argv++;
index a39bb0a11f72982f51222cdcf19d1010367c908f..bf3fd3f9c8d80ff84ace4150214118355585e917 100644 (file)
@@ -66,7 +66,7 @@ static int parse_opt_rebase(const struct option *opt, const char *arg, int unset
 }
 
 static const char * const pull_usage[] = {
-       N_("git pull [options] [<repository> [<refspec>...]]"),
+       N_("git pull [<options>] [<repository> [<refspec>...]]"),
        NULL
 };
 
index 70b9b1eaf17f5447021f7174f31e5c19d9754486..945611006a4ddcad1b834d87fe62698549ebb837 100644 (file)
@@ -193,6 +193,9 @@ int cmd_repack(int argc, const char **argv, const char *prefix)
        argc = parse_options(argc, argv, prefix, builtin_repack_options,
                                git_repack_usage, 0);
 
+       if (delete_redundant && repository_format_precious_objects)
+               die(_("cannot delete packs in a precious-objects repo"));
+
        if (pack_kept_objects < 0)
                pack_kept_objects = write_bitmaps;
 
diff --git a/cache.h b/cache.h
index 79066e57dc806d118366d9807e0af338b72e2fb2..d801429e0c34e085719b442ebc114f3fcb519f80 100644 (file)
--- a/cache.h
+++ b/cache.h
@@ -696,8 +696,15 @@ extern char *notes_ref_name;
 
 extern int grafts_replace_parents;
 
+/*
+ * GIT_REPO_VERSION is the version we write by default. The
+ * _READ variant is the highest number we know how to
+ * handle.
+ */
 #define GIT_REPO_VERSION 0
+#define GIT_REPO_VERSION_READ 1
 extern int repository_format_version;
+extern int repository_format_precious_objects;
 extern int check_repository_format(void);
 
 #define MTIME_CHANGED  0x0001
index 27a706f76621621a25b7e58188e5d1da9b9a2ccd..d3283b8a4f3e8ed8451e723ce8b39d468aaa3dd3 100644 (file)
--- a/connect.c
+++ b/connect.c
@@ -255,7 +255,7 @@ static const char *prot_name(enum protocol protocol)
                case PROTO_GIT:
                        return "git";
                default:
-                       return "unkown protocol";
+                       return "unknown protocol";
        }
 }
 
@@ -724,10 +724,13 @@ struct child_process *git_connect(int fd[2], const char *url,
                strbuf_addch(&cmd, ' ');
                sq_quote_buf(&cmd, path);
 
+               /* remove repo-local variables from the environment */
+               conn->env = local_repo_env;
+               conn->use_shell = 1;
                conn->in = conn->out = -1;
                if (protocol == PROTO_SSH) {
                        const char *ssh;
-                       int putty, tortoiseplink = 0;
+                       int putty = 0, tortoiseplink = 0;
                        char *ssh_host = hostandport;
                        const char *port = NULL;
                        transport_check_allowed("ssh");
@@ -750,13 +753,17 @@ struct child_process *git_connect(int fd[2], const char *url,
                        }
 
                        ssh = getenv("GIT_SSH_COMMAND");
-                       if (ssh) {
-                               conn->use_shell = 1;
-                               putty = 0;
-                       } else {
+                       if (!ssh) {
                                const char *base;
                                char *ssh_dup;
 
+                               /*
+                                * GIT_SSH is the no-shell version of
+                                * GIT_SSH_COMMAND (and must remain so for
+                                * historical compatibility).
+                                */
+                               conn->use_shell = 0;
+
                                ssh = getenv("GIT_SSH");
                                if (!ssh)
                                        ssh = "ssh";
@@ -766,8 +773,9 @@ struct child_process *git_connect(int fd[2], const char *url,
 
                                tortoiseplink = !strcasecmp(base, "tortoiseplink") ||
                                        !strcasecmp(base, "tortoiseplink.exe");
-                               putty = !strcasecmp(base, "plink") ||
-                                       !strcasecmp(base, "plink.exe") || tortoiseplink;
+                               putty = tortoiseplink ||
+                                       !strcasecmp(base, "plink") ||
+                                       !strcasecmp(base, "plink.exe");
 
                                free(ssh_dup);
                        }
@@ -782,9 +790,6 @@ struct child_process *git_connect(int fd[2], const char *url,
                        }
                        argv_array_push(&conn->args, ssh_host);
                } else {
-                       /* remove repo-local variables from the environment */
-                       conn->env = local_repo_env;
-                       conn->use_shell = 1;
                        transport_check_allowed("file");
                }
                argv_array_push(&conn->args, cmd.buf);
index e8dc2e0e7d5d8fb37f818a05c3ef4c58f28850da..6b3a03f9b070e6451572db9b160b293044279fa3 100755 (executable)
@@ -69,7 +69,7 @@ as appropriate to mark resolution and make a commit.")"
 die_merge () {
     if [ $(git config --bool --get advice.resolveConflict || echo true) = "true" ]; then
        die "$(gettext "You have not concluded your merge (MERGE_HEAD exists).
-Please, commit your changes before you can merge.")"
+Please, commit your changes before merging.")"
     else
        die "$(gettext "You have not concluded your merge (MERGE_HEAD exists).")"
     fi
diff --git a/dir.c b/dir.c
index 7b25634832716ade46686d118184c4d43d8c11e7..118ba59a27f51d1966c03faa8c36627a0a8d6246 100644 (file)
--- a/dir.c
+++ b/dir.c
@@ -2030,6 +2030,15 @@ int file_exists(const char *f)
        return lstat(f, &sb) == 0;
 }
 
+static int cmp_icase(char a, char b)
+{
+       if (a == b)
+               return 0;
+       if (ignore_case)
+               return toupper(a) - toupper(b);
+       return a - b;
+}
+
 /*
  * Given two normalized paths (a trailing slash is ok), if subdir is
  * outside dir, return -1.  Otherwise return the offset in subdir that
@@ -2041,7 +2050,7 @@ int dir_inside_of(const char *subdir, const char *dir)
 
        assert(dir && subdir && *dir && *subdir);
 
-       while (*dir && *subdir && *dir == *subdir) {
+       while (*dir && *subdir && !cmp_icase(*dir, *subdir)) {
                dir++;
                subdir++;
                offset++;
index a533aed630c20a5e0718bcea4375875a44896416..23a38e4b14f61f078bec3d7c2a5e5bcc5d505d9d 100644 (file)
@@ -26,6 +26,7 @@ int warn_ambiguous_refs = 1;
 int warn_on_object_refname_ambiguity = 1;
 int ref_paranoia = -1;
 int repository_format_version;
+int repository_format_precious_objects;
 const char *git_commit_encoding;
 const char *git_log_output_encoding;
 int shared_repository = PERM_UMASK;
index 5b3f63d8bbc65e80d1f4278e1ec6e27df604dc9a..fff8093d4f301b96a455a74dc062f7f645b15eed 100755 (executable)
@@ -347,7 +347,7 @@ while read commit parents; do
        fi
 
        {
-               while read -r header_line && test -n "$header_line"
+               while IFS='' read -r header_line && test -n "$header_line"
                do
                        # skip header lines...
                        :;
index f01637b1fdeb7f021b74171135ac0e7dba566542..d65c06eff36f09c982d66b11684d8f3ab3784393 100644 (file)
@@ -729,8 +729,8 @@ transform_todo_ids () {
                        # that do not have a SHA-1 at the beginning of $rest.
                        ;;
                *)
-                       sha1=$(git rev-parse --verify --quiet "$@" ${rest%% *}) &&
-                       rest="$sha1 ${rest#* }"
+                       sha1=$(git rev-parse --verify --quiet "$@" ${rest%%[     ]*}) &&
+                       rest="$sha1 ${rest#*[    ]}"
                        ;;
                esac
                printf '%s\n' "$command${rest:+ }$rest"
@@ -857,7 +857,8 @@ add_exec_commands () {
 # Check if the SHA-1 passed as an argument is a
 # correct one, if not then print $2 in "$todo".badsha
 # $1: the SHA-1 to test
-# $2: the line to display if incorrect SHA-1
+# $2: the line number of the input
+# $3: the input filename
 check_commit_sha () {
        badsha=0
        if test -z $1
@@ -873,9 +874,10 @@ check_commit_sha () {
 
        if test $badsha -ne 0
        then
+               line="$(sed -n -e "${2}p" "$3")"
                warn "Warning: the SHA-1 is missing or isn't" \
                        "a commit in the following line:"
-               warn " - $2"
+               warn " - $line"
                warn
        fi
 
@@ -886,37 +888,31 @@ check_commit_sha () {
 # from the todolist in stdin
 check_bad_cmd_and_sha () {
        retval=0
-       git stripspace --strip-comments |
-       (
-               while read -r line
-               do
-                       IFS=' '
-                       set -- $line
-                       command=$1
-                       sha1=$2
-
-                       case $command in
-                       ''|noop|x|"exec")
-                               # Doesn't expect a SHA-1
-                               ;;
-                       pick|p|drop|d|reword|r|edit|e|squash|s|fixup|f)
-                               if ! check_commit_sha $sha1 "$line"
-                               then
-                                       retval=1
-                               fi
-                               ;;
-                       *)
-                               warn "Warning: the command isn't recognized" \
-                                       "in the following line:"
-                               warn " - $line"
-                               warn
+       lineno=0
+       while read -r command rest
+       do
+               lineno=$(( $lineno + 1 ))
+               case $command in
+               "$comment_char"*|''|noop|x|exec)
+                       # Doesn't expect a SHA-1
+                       ;;
+               pick|p|drop|d|reword|r|edit|e|squash|s|fixup|f)
+                       if ! check_commit_sha "${rest%%[        ]*}" "$lineno" "$1"
+                       then
                                retval=1
-                               ;;
-                       esac
-               done
-
-               return $retval
-       )
+                       fi
+                       ;;
+               *)
+                       line="$(sed -n -e "${lineno}p" "$1")"
+                       warn "Warning: the command isn't recognized" \
+                               "in the following line:"
+                       warn " - $line"
+                       warn
+                       retval=1
+                       ;;
+               esac
+       done <"$1"
+       return $retval
 }
 
 # Print the list of the SHA-1 of the commits
@@ -1010,7 +1006,7 @@ check_todo_list () {
                ;;
        esac
 
-       if ! check_bad_cmd_and_sha <"$todo"
+       if ! check_bad_cmd_and_sha "$todo"
        then
                raise_error=t
        fi
diff --git a/pager.c b/pager.c
index 27d4c8a17aa17bb2cf31484227073e1a3204c17f..e425070528f4f9fbf0953c9056d1ea43686e176f 100644 (file)
--- a/pager.c
+++ b/pager.c
 static const char *pager_argv[] = { NULL, NULL };
 static struct child_process pager_process = CHILD_PROCESS_INIT;
 
-static void wait_for_pager(void)
+static void wait_for_pager(int in_signal)
 {
-       fflush(stdout);
-       fflush(stderr);
+       if (!in_signal) {
+               fflush(stdout);
+               fflush(stderr);
+       }
        /* signal EOF to pager */
        close(1);
        close(2);
-       finish_command(&pager_process);
+       if (in_signal)
+               finish_command_in_signal(&pager_process);
+       else
+               finish_command(&pager_process);
+}
+
+static void wait_for_pager_atexit(void)
+{
+       wait_for_pager(0);
 }
 
 static void wait_for_pager_signal(int signo)
 {
-       wait_for_pager();
+       wait_for_pager(1);
        sigchain_pop(signo);
        raise(signo);
 }
@@ -90,7 +100,7 @@ void setup_pager(void)
 
        /* this makes sure that the parent terminates after the pager */
        sigchain_push_common(wait_for_pager_signal);
-       atexit(wait_for_pager);
+       atexit(wait_for_pager_atexit);
 }
 
 int pager_in_use(void)
diff --git a/path.c b/path.c
index 95acbafa6883b4418f19a208cb9889f5642f3925..58d5620b98c22f85e252f48817e8cf58ffcf4dd3 100644 (file)
--- a/path.c
+++ b/path.c
@@ -676,6 +676,11 @@ const char *remove_leading_path(const char *in, const char *prefix)
  * normalized, any time "../" eats up to the prefix_len part,
  * prefix_len is reduced. In the end prefix_len is the remaining
  * prefix that has not been overridden by user pathspec.
+ *
+ * NEEDSWORK: This function doesn't perform normalization w.r.t. trailing '/'.
+ * For everything but the root folder itself, the normalized path should not
+ * end with a '/', then the callers need to be fixed up accordingly.
+ *
  */
 int normalize_path_copy_len(char *dst, const char *src, int *prefix_len)
 {
index 4f66cee346870259072108f2e6e4af9817a27329..c9e1fb8e0d61e199f6813961667ecc4aad701dec 100644 (file)
--- a/po/ru.po
+++ b/po/ru.po
@@ -10,10 +10,10 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Перевод Git на русский язык\n"
 "Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2015-07-14 07:19+0800\n"
-"PO-Revision-Date: 2015-07-14 13:06+0000\n"
+"POT-Creation-Date: 2015-09-15 06:45+0800\n"
+"PO-Revision-Date: 2015-09-30 14:53+0000\n"
 "Last-Translator: Dimitriy Ryazantcev <DJm00n@mail.ru>\n"
-"Language-Team: Russian (http://www.transifex.com/p/git-po-ru/language/ru/)\n"
+"Language-Team: Russian (http://www.transifex.com/djm00n/git-po-ru/language/ru/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
@@ -31,94 +31,106 @@ msgid ""
 "as appropriate to mark resolution and make a commit."
 msgstr "Исправьте их в рабочем каталоге, затем запустите «git add/rm <файл>»,\nчтобы пометить исправление и сделайте коммит."
 
-#: archive.c:11
+#: advice.c:101 builtin/merge.c:1227
+msgid "You have not concluded your merge (MERGE_HEAD exists)."
+msgstr "Вы не завершили слияние (присутствует файл MERGE_HEAD)."
+
+#: advice.c:103
+msgid "Please, commit your changes before you can merge."
+msgstr "Выполните коммит ваших изменений, перед слиянием."
+
+#: advice.c:104
+msgid "Exiting because of unfinished merge."
+msgstr "Выход из-за незавершенного слияния."
+
+#: archive.c:12
 msgid "git archive [<options>] <tree-ish> [<path>...]"
 msgstr "git archive [<опции>] <указатель-дерева> [<путь>…]"
 
-#: archive.c:12
+#: archive.c:13
 msgid "git archive --list"
 msgstr "git archive --list"
 
-#: archive.c:13
+#: archive.c:14
 msgid ""
 "git archive --remote <repo> [--exec <cmd>] [<options>] <tree-ish> "
 "[<path>...]"
 msgstr "git archive --remote <репозиторий> [--exec <команда>] [<опции>] <указатель-дерева> [<путь>…]"
 
-#: archive.c:14
+#: archive.c:15
 msgid "git archive --remote <repo> [--exec <cmd>] --list"
 msgstr "git archive --remote <репозиторий> [--exec <команда>] --list"
 
-#: archive.c:342 builtin/add.c:137 builtin/add.c:428 builtin/rm.c:327
+#: archive.c:343 builtin/add.c:137 builtin/add.c:426 builtin/rm.c:327
 #, c-format
 msgid "pathspec '%s' did not match any files"
 msgstr "спецификация пути «%s» не соответствует ни одному файлу"
 
-#: archive.c:427
+#: archive.c:428
 msgid "fmt"
 msgstr "формат"
 
-#: archive.c:427
+#: archive.c:428
 msgid "archive format"
 msgstr "формат архива"
 
-#: archive.c:428 builtin/log.c:1204
+#: archive.c:429 builtin/log.c:1229
 msgid "prefix"
 msgstr "префикс"
 
-#: archive.c:429
+#: archive.c:430
 msgid "prepend prefix to each pathname in the archive"
 msgstr "добавлять префикс перед каждым путем файла в архиве"
 
-#: archive.c:430 builtin/archive.c:88 builtin/blame.c:2516
-#: builtin/blame.c:2517 builtin/config.c:57 builtin/fast-export.c:986
-#: builtin/fast-export.c:988 builtin/grep.c:712 builtin/hash-object.c:99
-#: builtin/ls-files.c:446 builtin/ls-files.c:449 builtin/notes.c:394
-#: builtin/notes.c:557 builtin/read-tree.c:109 parse-options.h:150
+#: archive.c:431 builtin/archive.c:88 builtin/blame.c:2516
+#: builtin/blame.c:2517 builtin/config.c:58 builtin/fast-export.c:987
+#: builtin/fast-export.c:989 builtin/grep.c:712 builtin/hash-object.c:99
+#: builtin/ls-files.c:446 builtin/ls-files.c:449 builtin/notes.c:395
+#: builtin/notes.c:558 builtin/read-tree.c:109 parse-options.h:153
 msgid "file"
 msgstr "файл"
 
-#: archive.c:431 builtin/archive.c:89
+#: archive.c:432 builtin/archive.c:89
 msgid "write the archive to this file"
 msgstr "запись архива в этот файл"
 
-#: archive.c:433
+#: archive.c:434
 msgid "read .gitattributes in working directory"
 msgstr "читать .gitattributes в рабочем каталоге"
 
-#: archive.c:434
+#: archive.c:435
 msgid "report archived files on stderr"
 msgstr "отчет об архивированных файлах в stderr"
 
-#: archive.c:435
+#: archive.c:436
 msgid "store only"
 msgstr "только хранение"
 
-#: archive.c:436
+#: archive.c:437
 msgid "compress faster"
 msgstr "сжимать быстрее"
 
-#: archive.c:444
+#: archive.c:445
 msgid "compress better"
 msgstr "сжимать лучше"
 
-#: archive.c:447
+#: archive.c:448
 msgid "list supported archive formats"
 msgstr "перечислить поддерживаемые форматы архивов"
 
-#: archive.c:449 builtin/archive.c:90 builtin/clone.c:77
+#: archive.c:450 builtin/archive.c:90 builtin/clone.c:77
 msgid "repo"
 msgstr "репозиторий"
 
-#: archive.c:450 builtin/archive.c:91
+#: archive.c:451 builtin/archive.c:91
 msgid "retrieve the archive from remote repository <repo>"
 msgstr "получить архив из внешнего <репозитория>"
 
-#: archive.c:451 builtin/archive.c:92 builtin/notes.c:478
+#: archive.c:452 builtin/archive.c:92 builtin/notes.c:479
 msgid "command"
 msgstr "комманда"
 
-#: archive.c:452 builtin/archive.c:93
+#: archive.c:453 builtin/archive.c:93
 msgid "path to the remote git-upload-archive command"
 msgstr "путь к команде git-upload-archive на машине с внешним репозиторием"
 
@@ -230,6 +242,11 @@ msgstr "Неоднозначное имя объекта: «%s»."
 msgid "Not a valid branch point: '%s'."
 msgstr "Недопустимая точка ветки: «%s»."
 
+#: branch.c:399
+#, c-format
+msgid "'%s' is already checked out at '%s'"
+msgstr "«%s» уже находится на «%s»"
+
 #: bundle.c:34
 #, c-format
 msgid "'%s' does not look like a v2 bundle file"
@@ -240,7 +257,7 @@ msgstr "«%s» не похож на файл пакета версии 2"
 msgid "unrecognized header: %s%s (%d)"
 msgstr "неопознанный заголовок: %s%s (%d)"
 
-#: bundle.c:87 builtin/commit.c:766
+#: bundle.c:87 builtin/commit.c:765
 #, c-format
 msgid "could not open '%s'"
 msgstr "не удалось открыть «%s»"
@@ -249,9 +266,9 @@ msgstr "не удалось открыть «%s»"
 msgid "Repository lacks these prerequisite commits:"
 msgstr "В репозитории отсутствуют необходимые коммиты:"
 
-#: bundle.c:163 sequencer.c:650 sequencer.c:1105 builtin/blame.c:2705
-#: builtin/branch.c:651 builtin/commit.c:1045 builtin/log.c:330
-#: builtin/log.c:825 builtin/log.c:1432 builtin/log.c:1666 builtin/merge.c:358
+#: bundle.c:163 sequencer.c:636 sequencer.c:1083 builtin/blame.c:2708
+#: builtin/branch.c:652 builtin/commit.c:1044 builtin/log.c:334
+#: builtin/log.c:850 builtin/log.c:1457 builtin/log.c:1690 builtin/merge.c:358
 #: builtin/shortlog.c:158
 msgid "revision walk setup failed"
 msgstr "сбой инициализации прохода по редакциям"
@@ -278,38 +295,38 @@ msgstr[1] "Пакет требует эти %d ссылки:"
 msgstr[2] "Пакет требует эти %d ссылок:"
 msgstr[3] "Пакет требует эти %d ссылок:"
 
-#: bundle.c:251
+#: bundle.c:253
 msgid "Could not spawn pack-objects"
 msgstr "Не удалось создать объекты пакета"
 
-#: bundle.c:269
+#: bundle.c:264
 msgid "pack-objects died"
 msgstr "критическая ошибка pack-objects"
 
-#: bundle.c:309
+#: bundle.c:304
 msgid "rev-list died"
 msgstr "критическая ошибка rev-list"
 
-#: bundle.c:358
+#: bundle.c:353
 #, c-format
 msgid "ref '%s' is excluded by the rev-list options"
 msgstr "ссылка «%s» исключена в соответствии с опциями rev-list"
 
-#: bundle.c:437 builtin/log.c:153 builtin/log.c:1342 builtin/shortlog.c:261
+#: bundle.c:443 builtin/log.c:157 builtin/log.c:1367 builtin/shortlog.c:261
 #, c-format
 msgid "unrecognized argument: %s"
 msgstr "неопознанный аргумент: %s"
 
-#: bundle.c:443
+#: bundle.c:449
 msgid "Refusing to create empty bundle."
 msgstr "Отклонение создания пустого пакета."
 
-#: bundle.c:453
+#: bundle.c:459
 #, c-format
 msgid "cannot create '%s'"
 msgstr "не удалось создать «%s»"
 
-#: bundle.c:474
+#: bundle.c:480
 msgid "index-pack died"
 msgstr "критическая ошибка index-pack"
 
@@ -318,7 +335,8 @@ msgstr "критическая ошибка index-pack"
 msgid "invalid color value: %.*s"
 msgstr "недопустимое значение цвета: %.*s"
 
-#: commit.c:40
+#: commit.c:40 builtin/am.c:451 builtin/am.c:487 builtin/am.c:1516
+#: builtin/am.c:2128
 #, c-format
 msgid "could not parse %s"
 msgstr "не удалось разобрать %s"
@@ -494,75 +512,75 @@ msgstr "сбой чтения orderfile «%s»"
 msgid "Performing inexact rename detection"
 msgstr "Выполняется неточное определение переименования"
 
-#: diff.c:114
+#: diff.c:116
 #, c-format
 msgid "  Failed to parse dirstat cut-off percentage '%s'\n"
 msgstr "  Сбой разбора величины среза (cut-off) у dirstat «%s»\n"
 
-#: diff.c:119
+#: diff.c:121
 #, c-format
 msgid "  Unknown dirstat parameter '%s'\n"
 msgstr "Неизвестный параметр dirstat: «%s»\n"
 
-#: diff.c:214
+#: diff.c:216
 #, c-format
 msgid "Unknown value for 'diff.submodule' config variable: '%s'"
 msgstr "Неизвестное значения для переменной «diff.submodule»: «%s»"
 
-#: diff.c:266
+#: diff.c:268
 #, c-format
 msgid ""
 "Found errors in 'diff.dirstat' config variable:\n"
 "%s"
 msgstr "Найдены ошибки в переменной «diff.dirstat»:\n%s"
 
-#: diff.c:2997
+#: diff.c:2998
 #, c-format
 msgid "external diff died, stopping at %s"
 msgstr "критическая ошибка при внешнем сравнении, останов на %s"
 
-#: diff.c:3393
+#: diff.c:3394
 msgid "--follow requires exactly one pathspec"
 msgstr "--follow требует ровно одной спецификации пути"
 
-#: diff.c:3556
+#: diff.c:3557
 #, c-format
 msgid ""
 "Failed to parse --dirstat/-X option parameter:\n"
 "%s"
 msgstr "Сбой разбора параметра опции --dirstat/-X :\n%s"
 
-#: diff.c:3570
+#: diff.c:3571
 #, c-format
 msgid "Failed to parse --submodule option parameter: '%s'"
 msgstr "Сбой разбора параметра опции --submodule: «%s»"
 
-#: dir.c:1852
+#: dir.c:1853
 msgid "failed to get kernel name and information"
 msgstr "не удалось получить имя ядра и информацию"
 
-#: dir.c:1945
+#: dir.c:1936
 msgid "Untracked cache is disabled on this system."
 msgstr "Кэш неотслеживаемых файлов отключен на этой системе."
 
-#: gpg-interface.c:129 gpg-interface.c:200
+#: gpg-interface.c:166 gpg-interface.c:237
 msgid "could not run gpg."
 msgstr "не удалось запустить gpg."
 
-#: gpg-interface.c:141
+#: gpg-interface.c:178
 msgid "gpg did not accept the data"
 msgstr "gpg не принял данные"
 
-#: gpg-interface.c:152
+#: gpg-interface.c:189
 msgid "gpg failed to sign the data"
 msgstr "gpg не удалось подписать данные"
 
-#: gpg-interface.c:185
+#: gpg-interface.c:222
 #, c-format
 msgid "could not create temporary file '%s': %s"
 msgstr "не удалось создать временный файл «%s»: %s"
 
-#: gpg-interface.c:188
+#: gpg-interface.c:225
 #, c-format
 msgid "failed writing detached signature to '%s': %s"
 msgstr "сбой записи отсоединенной подписи в «%s»: %s"
@@ -640,20 +658,12 @@ msgstr[3] "\nВозможно, вы имели в виду что-то из эт
 msgid "%s: %s - %s"
 msgstr "%s: %s — %s"
 
-#: lockfile.c:345
-msgid "BUG: reopen a lockfile that is still open"
-msgstr "БАГ: повторное открытие файла блокировки, который уже открыт"
-
-#: lockfile.c:347
-msgid "BUG: reopen a lockfile that has been committed"
-msgstr "БАГ: повторное открытие файла блокировки, который уже был закоммичен"
-
 #: merge.c:41
 msgid "failed to read the cache"
 msgstr "сбой чтения кэша"
 
-#: merge.c:94 builtin/checkout.c:376 builtin/checkout.c:587
-#: builtin/clone.c:647
+#: merge.c:94 builtin/am.c:2001 builtin/am.c:2036 builtin/checkout.c:375
+#: builtin/checkout.c:586 builtin/clone.c:715
 msgid "unable to write new index file"
 msgstr "не удалось записать новый файл индекса"
 
@@ -700,7 +710,7 @@ msgstr "невозможно прочитать объект %s «%s»"
 msgid "blob expected for %s '%s'"
 msgstr "ожидается двоичный объект для %s «%s»"
 
-#: merge-recursive.c:788 builtin/clone.c:306
+#: merge-recursive.c:788 builtin/clone.c:364
 #, c-format
 msgid "failed to open '%s'"
 msgstr "не удалось открыть «%s»"
@@ -908,19 +918,19 @@ msgstr "Не удается записать индекс."
 msgid "Cannot commit uninitialized/unreferenced notes tree"
 msgstr "Нельзя закоммитить неинициализированное или не имеющее ссылок дерево заметок"
 
-#: notes-utils.c:82
+#: notes-utils.c:100
 #, c-format
 msgid "Bad notes.rewriteMode value: '%s'"
 msgstr "Неправильное значение notes.rewriteMode: «%s»"
 
-#: notes-utils.c:92
+#: notes-utils.c:110
 #, c-format
 msgid "Refusing to rewrite notes in %s (outside of refs/notes/)"
 msgstr "Отказ в перезаписи заметок в %s (за пределами refs/notes/)"
 
 #. TRANSLATORS: The first %s is the name of the
 #. environment variable, the second %s is its value
-#: notes-utils.c:119
+#: notes-utils.c:137
 #, c-format
 msgid "Bad %s value: '%s'"
 msgstr "Неправильное значение переменной %s: «%s»"
@@ -930,28 +940,28 @@ msgstr "Неправильное значение переменной %s: «%s
 msgid "unable to parse object: %s"
 msgstr "не удалось разобрать объект: %s"
 
-#: parse-options.c:546
+#: parse-options.c:563
 msgid "..."
 msgstr "…"
 
-#: parse-options.c:564
+#: parse-options.c:581
 #, c-format
 msgid "usage: %s"
 msgstr "использование: %s"
 
 #. TRANSLATORS: the colon here should align with the
 #. one in "usage: %s" translation
-#: parse-options.c:568
+#: parse-options.c:585
 #, c-format
 msgid "   or: %s"
 msgstr "          или: %s"
 
-#: parse-options.c:571
+#: parse-options.c:588
 #, c-format
 msgid "    %s"
 msgstr "            %s"
 
-#: parse-options.c:605
+#: parse-options.c:622
 msgid "-NUM"
 msgstr "-КОЛИЧЕСТВО"
 
@@ -1015,7 +1025,7 @@ msgid ""
 "Perhaps you forgot to add either ':/' or '.' ?"
 msgstr "Не указан шаблон для исключения с помощью :(exclude).\nВозможно, вы забыли «:/» или «.» ?"
 
-#: pretty.c:968
+#: pretty.c:969
 msgid "unable to parse --pretty format"
 msgstr "не удалось разобрать формат для --pretty"
 
@@ -1023,20 +1033,45 @@ msgstr "не удалось разобрать формат для --pretty"
 msgid "done"
 msgstr "готово"
 
-#: read-cache.c:1295
+#: read-cache.c:1296
 #, c-format
 msgid ""
 "index.version set, but the value is invalid.\n"
 "Using version %i"
 msgstr "index.version указан, но значение недействительное.\nИспользую версию %i"
 
-#: read-cache.c:1305
+#: read-cache.c:1306
 #, c-format
 msgid ""
 "GIT_INDEX_VERSION set, but the value is invalid.\n"
 "Using version %i"
 msgstr "GIT_INDEX_VERSION указан, но значение недействительное.\nИспользую версию %i"
 
+#: refs.c:2941 builtin/merge.c:760 builtin/merge.c:871 builtin/merge.c:973
+#: builtin/merge.c:983
+#, c-format
+msgid "Could not open '%s' for writing"
+msgstr "Не удалось открыть «%s» для записи"
+
+#: refs.c:3001
+#, c-format
+msgid "could not delete reference %s: %s"
+msgstr "не удалось удалить ссылку %s: %s"
+
+#: refs.c:3004
+#, c-format
+msgid "could not delete references: %s"
+msgstr "не удалось удалить ссылки: %s"
+
+#: refs.c:3013
+#, c-format
+msgid "could not remove reference %s"
+msgstr "не удалось удалить ссылки %s"
+
+#: ref-filter.c:660
+msgid "unable to parse format"
+msgstr "не удалось разобрать формат"
+
 #: remote.c:792
 #, c-format
 msgid "Cannot fetch both %s and %s to %s"
@@ -1156,7 +1191,16 @@ msgstr[3] "Ваша ветка и «%s» разошлись\nи теперь и
 msgid "  (use \"git pull\" to merge the remote branch into yours)\n"
 msgstr "  (используйте «git pull», чтобы слить внешнюю ветку в вашу)\n"
 
-#: revision.c:2366
+#: revision.c:2198
+msgid "your current branch appears to be broken"
+msgstr "похоже, ваша текущая ветка повреждена"
+
+#: revision.c:2201
+#, c-format
+msgid "your current branch '%s' does not have any commits yet"
+msgstr "ваша текущая ветка «%s» еще не содержит ни одного коммита"
+
+#: revision.c:2395
 msgid "--first-parent is incompatible with --bisect"
 msgstr "опцию --first-parent нельзя использовать одновременно с --bisect"
 
@@ -1169,257 +1213,251 @@ msgstr "сбой открытия /dev/null"
 msgid "dup2(%d,%d) failed"
 msgstr "dup2(%d,%d) сбой"
 
-#: send-pack.c:272
+#: send-pack.c:295
 msgid "failed to sign the push certificate"
 msgstr "сбой подписания сертификата отправки"
 
-#: send-pack.c:378
+#: send-pack.c:404
 msgid "the receiving end does not support --signed push"
 msgstr "принимающая сторона не поддерживает отправку с опцией --signed"
 
-#: send-pack.c:389
+#: send-pack.c:406
+msgid ""
+"not sending a push certificate since the receiving end does not support "
+"--signed push"
+msgstr "не отправляем сертификат для отправки, так как принимающая сторона не поддерживает отправку с опцией --signed"
+
+#: send-pack.c:418
 msgid "the receiving end does not support --atomic push"
 msgstr "принимающая сторона не поддерживает отправку с опцией --atomic"
 
-#: sequencer.c:172 builtin/merge.c:760 builtin/merge.c:871 builtin/merge.c:973
-#: builtin/merge.c:983
-#, c-format
-msgid "Could not open '%s' for writing"
-msgstr "Не удалось открыть «%s» для записи"
-
-#: sequencer.c:174 builtin/merge.c:344 builtin/merge.c:763 builtin/merge.c:975
-#: builtin/merge.c:988
-#, c-format
-msgid "Could not write to '%s'"
-msgstr "Не удалось записать в «%s»"
-
-#: sequencer.c:195
+#: sequencer.c:183
 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:198
+#: sequencer.c:186
 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:211 sequencer.c:861 sequencer.c:944
+#: sequencer.c:199 sequencer.c:842 sequencer.c:922
 #, c-format
 msgid "Could not write to %s"
 msgstr "Не удалось записать в %s"
 
-#: sequencer.c:214
+#: sequencer.c:202
 #, c-format
 msgid "Error wrapping up %s"
 msgstr "Ошибка оборачивания %s"
 
-#: sequencer.c:229
+#: sequencer.c:217
 msgid "Your local changes would be overwritten by cherry-pick."
 msgstr "Ваши локальные изменение будут перезаписаны отбором лучшего."
 
-#: sequencer.c:231
+#: sequencer.c:219
 msgid "Your local changes would be overwritten by revert."
 msgstr "Ваши локальные изменение будут перезаписаны возвратом коммита."
 
-#: sequencer.c:234
+#: sequencer.c:222
 msgid "Commit your changes or stash them to proceed."
 msgstr "Сделайте коммит или спрячьте ваши изменения для продолжения."
 
 #. TRANSLATORS: %s will be "revert" or "cherry-pick"
-#: sequencer.c:321
+#: sequencer.c:309
 #, c-format
 msgid "%s: Unable to write new index file"
 msgstr "%s: Не удалось записать файл индекса"
 
-#: sequencer.c:339
+#: sequencer.c:327
 msgid "Could not resolve HEAD commit\n"
 msgstr "Не удалось определить HEAD коммит\n"
 
-#: sequencer.c:359
+#: sequencer.c:347
 msgid "Unable to update cache tree\n"
 msgstr "Не удалось обновить дерево кэша\n"
 
-#: sequencer.c:411
+#: sequencer.c:399
 #, c-format
 msgid "Could not parse commit %s\n"
 msgstr "Не удалось разобрать коммит %s\n"
 
-#: sequencer.c:416
+#: sequencer.c:404
 #, c-format
 msgid "Could not parse parent commit %s\n"
 msgstr "Не удалось разобрать родительскую коммит %s\n"
 
-#: sequencer.c:482
+#: sequencer.c:469
 msgid "Your index file is unmerged."
 msgstr "Ваш файл индекса не слит."
 
-#: sequencer.c:501
+#: sequencer.c:488
 #, c-format
 msgid "Commit %s is a merge but no -m option was given."
 msgstr "Коммит %s — это коммит-слияние, но опция -m не указана."
 
-#: sequencer.c:509
+#: sequencer.c:496
 #, c-format
 msgid "Commit %s does not have parent %d"
 msgstr "У коммита %s нет предка %d"
 
-#: sequencer.c:513
+#: sequencer.c:500
 #, c-format
 msgid "Mainline was specified but commit %s is not a merge."
 msgstr "Основная ветка указана, но коммит %s не является слиянием."
 
 #. TRANSLATORS: The first %s will be "revert" or
 #. "cherry-pick", the second %s a SHA1
-#: sequencer.c:526
+#: sequencer.c:513
 #, c-format
 msgid "%s: cannot parse parent commit %s"
 msgstr "%s: не удалось разобрать родительский коммит для %s"
 
-#: sequencer.c:530
+#: sequencer.c:517
 #, c-format
 msgid "Cannot get commit message for %s"
 msgstr "Не удалось получить сообщение коммита для %s"
 
-#: sequencer.c:616
+#: sequencer.c:603
 #, c-format
 msgid "could not revert %s... %s"
 msgstr "не удалось возвратить коммит %s… %s"
 
-#: sequencer.c:617
+#: sequencer.c:604
 #, c-format
 msgid "could not apply %s... %s"
 msgstr "не удалось применить коммит %s… %s"
 
-#: sequencer.c:653
+#: sequencer.c:639
 msgid "empty commit set passed"
 msgstr "передан пустой набор коммитов"
 
-#: sequencer.c:661
+#: sequencer.c:647
 #, c-format
 msgid "git %s: failed to read the index"
 msgstr "git %s: сбой чтения индекса"
 
-#: sequencer.c:665
+#: sequencer.c:651
 #, c-format
 msgid "git %s: failed to refresh the index"
 msgstr "git %s: сбой обновления индекса"
 
-#: sequencer.c:725
+#: sequencer.c:711
 #, c-format
 msgid "Cannot %s during a %s"
 msgstr "Не удалось %s во время %s"
 
-#: sequencer.c:747
+#: sequencer.c:733
 #, c-format
 msgid "Could not parse line %d."
 msgstr "Не удалось разобрать строку %d."
 
-#: sequencer.c:752
+#: sequencer.c:738
 msgid "No commits parsed."
 msgstr "Коммиты не разобраны."
 
-#: sequencer.c:765
+#: sequencer.c:750
 #, c-format
 msgid "Could not open %s"
 msgstr "Не удалось открыть %s"
 
-#: sequencer.c:769
+#: sequencer.c:754
 #, c-format
 msgid "Could not read %s."
 msgstr "Не удалось прочитать %s."
 
-#: sequencer.c:776
+#: sequencer.c:761
 #, c-format
 msgid "Unusable instruction sheet: %s"
 msgstr "Непригодная для использования карта с инструкциями: %s"
 
-#: sequencer.c:806
+#: sequencer.c:791
 #, c-format
 msgid "Invalid key: %s"
 msgstr "Недействительный ключ: %s"
 
-#: sequencer.c:809
+#: sequencer.c:794 builtin/pull.c:47 builtin/pull.c:49
 #, c-format
 msgid "Invalid value for %s: %s"
 msgstr "Неправильное значение %s: %s"
 
-#: sequencer.c:821
+#: sequencer.c:804
 #, c-format
 msgid "Malformed options sheet: %s"
 msgstr "Испорченная карта с опциями: %s"
 
-#: sequencer.c:842
+#: sequencer.c:823
 msgid "a cherry-pick or revert is already in progress"
 msgstr "отбор лучшего или возврат коммита уже выполняется"
 
-#: sequencer.c:843
+#: sequencer.c:824
 msgid "try \"git cherry-pick (--continue | --quit | --abort)\""
 msgstr "попробуйте «git cherry-pick (--continue | --quit | --abort)»"
 
-#: sequencer.c:847
+#: sequencer.c:828
 #, c-format
 msgid "Could not create sequencer directory %s"
 msgstr "Не удалось создать каталог для указателя следования коммитов %s"
 
-#: sequencer.c:863 sequencer.c:948
+#: sequencer.c:844 sequencer.c:926
 #, c-format
 msgid "Error wrapping up %s."
 msgstr "Ошибка оборачивания %s."
 
-#: sequencer.c:882 sequencer.c:1018
+#: sequencer.c:863 sequencer.c:996
 msgid "no cherry-pick or revert in progress"
 msgstr "отбор лучшего или возврат коммита не выполняется"
 
-#: sequencer.c:884
+#: sequencer.c:865
 msgid "cannot resolve HEAD"
 msgstr "не удалось определить HEAD"
 
-#: sequencer.c:886
+#: sequencer.c:867
 msgid "cannot abort from a branch yet to be born"
 msgstr "нельзя отменить изменения с ветки, которая еще не создана"
 
-#: sequencer.c:908 builtin/apply.c:4291
+#: sequencer.c:887 builtin/apply.c:4291
 #, c-format
 msgid "cannot open %s: %s"
 msgstr "не удалось открыть %s: %s"
 
-#: sequencer.c:911
+#: sequencer.c:890
 #, c-format
 msgid "cannot read %s: %s"
 msgstr "не удалось прочитать %s: %s"
 
-#: sequencer.c:912
+#: sequencer.c:891
 msgid "unexpected end of file"
 msgstr "неожиданный конец файла"
 
-#: sequencer.c:918
+#: sequencer.c:897
 #, c-format
 msgid "stored pre-cherry-pick HEAD file '%s' is corrupt"
 msgstr "сохраненный файл с HEAD перед отбором лучшего «%s» поврежден"
 
-#: sequencer.c:941
+#: sequencer.c:919
 #, c-format
 msgid "Could not format %s."
 msgstr "Не удалось отформатировать %s."
 
-#: sequencer.c:1086
+#: sequencer.c:1064
 #, c-format
 msgid "%s: can't cherry-pick a %s"
 msgstr "%s: не удалось отобрать %s"
 
-#: sequencer.c:1089
+#: sequencer.c:1067
 #, c-format
 msgid "%s: bad revision"
 msgstr "%s: плохая редакция"
 
-#: sequencer.c:1123
+#: sequencer.c:1101
 msgid "Can't revert as initial commit"
 msgstr "Нельзя возвратить изначальный коммит"
 
-#: sequencer.c:1124
+#: sequencer.c:1102
 msgid "Can't cherry-pick into empty head"
 msgstr "Нельзя отобрать лучшее в пустой HEAD"
 
@@ -1441,30 +1479,30 @@ msgid ""
 "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»"
 
-#: submodule.c:64 submodule.c:98
+#: submodule.c:61 submodule.c:95
 msgid "Cannot change unmerged .gitmodules, resolve merge conflicts first"
 msgstr "Не удалось изменить не слитый .gitmodules, сначала разрешите конфликты"
 
-#: submodule.c:68 submodule.c:102
+#: submodule.c:65 submodule.c:99
 #, c-format
 msgid "Could not find section in .gitmodules where path=%s"
 msgstr "Не удалось найти раздел в .gitmodules, где путь равен %s"
 
-#: submodule.c:76
+#: submodule.c:73
 #, c-format
 msgid "Could not update .gitmodules entry %s"
 msgstr " Не удалось обновить .gitmodules запись %s"
 
-#: submodule.c:109
+#: submodule.c:106
 #, c-format
 msgid "Could not remove .gitmodules entry for %s"
 msgstr "Не удалось удалить запись в .gitmodules для %s"
 
-#: submodule.c:120
+#: submodule.c:117
 msgid "staging updated .gitmodules failed"
 msgstr "сбой индексирования обновленного .gitmodules"
 
-#: submodule.c:1115
+#: submodule.c:1045
 #, c-format
 msgid "Could not set core.worktree in %s"
 msgstr "Не удалось установить core.worktree в %s"
@@ -1494,6 +1532,11 @@ msgstr "не удалось прочитать входной файл «%s»"
 msgid "could not read from stdin"
 msgstr "не удалось прочитать из стандартного ввода"
 
+#: transport-helper.c:1025
+#, c-format
+msgid "Could not read ref %s"
+msgstr "Не удалось прочитать ссылку %s"
+
 #: unpack-trees.c:203
 msgid "Checking out files"
 msgstr "Распаковка файлов"
@@ -1527,368 +1570,423 @@ msgstr "неправильный номер порта"
 msgid "invalid '..' path segment"
 msgstr "неправильная часть пути «..»"
 
-#: wrapper.c:523
+#: wrapper.c:219 wrapper.c:362
+#, c-format
+msgid "could not open '%s' for reading and writing"
+msgstr "не удалось открыть «%s» для чтения и записи"
+
+#: wrapper.c:221 wrapper.c:364
+#, c-format
+msgid "could not open '%s' for writing"
+msgstr "не удалось открыть «%s» для записи"
+
+#: wrapper.c:223 wrapper.c:366 builtin/am.c:337 builtin/commit.c:1688
+#: builtin/merge.c:1076 builtin/pull.c:380
+#, c-format
+msgid "could not open '%s' for reading"
+msgstr "не удалось открыть «%s» для чтения"
+
+#: wrapper.c:579
 #, c-format
 msgid "unable to access '%s': %s"
 msgstr "«%s» недоступно: %s"
 
-#: wrapper.c:544
+#: wrapper.c:600
 #, c-format
 msgid "unable to access '%s'"
 msgstr "«%s» недоступно"
 
-#: wrapper.c:555
+#: wrapper.c:611
 #, c-format
 msgid "unable to look up current user in the passwd file: %s"
 msgstr "не удалось запросить текущего пользователя в файле passwd: %s"
 
-#: wrapper.c:556
+#: wrapper.c:612
 msgid "no such user"
 msgstr "нет такого пользователя"
 
-#: wrapper.c:564
+#: wrapper.c:620
 msgid "unable to get current working directory"
 msgstr "не удалось получить текущий рабочий каталог"
 
-#: wrapper.c:575
+#: wrapper.c:631
 #, c-format
 msgid "could not open %s for writing"
 msgstr "не удалось открыть «%s» для записи"
 
-#: wrapper.c:587
+#: wrapper.c:642 builtin/am.c:424
 #, c-format
 msgid "could not write to %s"
 msgstr "не удалось записать в %s"
 
-#: wrapper.c:593
+#: wrapper.c:648
 #, c-format
 msgid "could not close %s"
 msgstr "не удалось закрыть %s"
 
-#: wt-status.c:150
+#: wt-status.c:149
 msgid "Unmerged paths:"
 msgstr "Не слитые пути:"
 
-#: wt-status.c:177 wt-status.c:204
+#: wt-status.c:176 wt-status.c:203
 #, c-format
 msgid "  (use \"git reset %s <file>...\" to unstage)"
 msgstr "  (используйте «git reset %s <файл>…», чтобы убрать из индекса)"
 
-#: wt-status.c:179 wt-status.c:206
+#: wt-status.c:178 wt-status.c:205
 msgid "  (use \"git rm --cached <file>...\" to unstage)"
 msgstr "  (используйте «git rm --cached <файл>…», чтобы убрать из индекса)"
 
-#: wt-status.c:183
+#: wt-status.c:182
 msgid "  (use \"git add <file>...\" to mark resolution)"
 msgstr "  (используйте «git add <файл>…», чтобы пометить разрешение конфликта)"
 
-#: wt-status.c:185 wt-status.c:189
+#: wt-status.c:184 wt-status.c:188
 msgid "  (use \"git add/rm <file>...\" as appropriate to mark resolution)"
 msgstr "  (используйте «git add/rm <файл>…», чтобы пометить выбранное разрешение конфликта)"
 
-#: wt-status.c:187
+#: wt-status.c:186
 msgid "  (use \"git rm <file>...\" to mark resolution)"
 msgstr "  (используйте «git rm <файл>…», чтобы пометить разрешение конфликта)"
 
-#: wt-status.c:198 wt-status.c:881
+#: wt-status.c:197 wt-status.c:880
 msgid "Changes to be committed:"
 msgstr "Изменения, которые будут включены в коммит:"
 
-#: wt-status.c:216 wt-status.c:890
+#: wt-status.c:215 wt-status.c:889
 msgid "Changes not staged for commit:"
 msgstr "Изменения, которые не в индексе для коммита:"
 
-#: wt-status.c:220
+#: wt-status.c:219
 msgid "  (use \"git add <file>...\" to update what will be committed)"
 msgstr "  (используйте «git add <файл>…», чтобы добавить файл в индекс)"
 
-#: wt-status.c:222
+#: wt-status.c:221
 msgid "  (use \"git add/rm <file>...\" to update what will be committed)"
 msgstr "  (используйте «git add/rm <файл>…», чтобы добавить или удалить файл из индекса)"
 
-#: wt-status.c:223
+#: wt-status.c:222
 msgid ""
 "  (use \"git checkout -- <file>...\" to discard changes in working "
 "directory)"
 msgstr "  (используйте «git checkout -- <файл>…», чтобы отменить изменения\n   в рабочем каталоге)"
 
-#: wt-status.c:225
+#: wt-status.c:224
 msgid "  (commit or discard the untracked or modified content in submodules)"
 msgstr "  (сделайте коммит или отмените изменения в неотслеживаемом или измененном содержимом в подмодулях)"
 
-#: wt-status.c:237
+#: wt-status.c:236
 #, c-format
 msgid "  (use \"git %s <file>...\" to include in what will be committed)"
 msgstr "  (используйте «git %s <файл>…», чтобы добавить в то, что будет включено в коммит)"
 
-#: wt-status.c:252
+#: wt-status.c:251
 msgid "both deleted:"
 msgstr "оба удалены:"
 
-#: wt-status.c:254
+#: wt-status.c:253
 msgid "added by us:"
 msgstr "добавлено нами:"
 
-#: wt-status.c:256
+#: wt-status.c:255
 msgid "deleted by them:"
 msgstr "удалено ими:"
 
-#: wt-status.c:258
+#: wt-status.c:257
 msgid "added by them:"
 msgstr "добавлено ими:"
 
-#: wt-status.c:260
+#: wt-status.c:259
 msgid "deleted by us:"
 msgstr "удалено нами:"
 
-#: wt-status.c:262
+#: wt-status.c:261
 msgid "both added:"
 msgstr "оба добавлены:"
 
-#: wt-status.c:264
+#: wt-status.c:263
 msgid "both modified:"
 msgstr "оба измены:"
 
-#: wt-status.c:266
+#: wt-status.c:265
 #, c-format
 msgid "bug: unhandled unmerged status %x"
 msgstr "ошибка: необработанный статус не слитых изменений %x"
 
-#: wt-status.c:274
+#: wt-status.c:273
 msgid "new file:"
 msgstr "новый файл:"
 
-#: wt-status.c:276
+#: wt-status.c:275
 msgid "copied:"
 msgstr "скопировано:"
 
-#: wt-status.c:278
+#: wt-status.c:277
 msgid "deleted:"
 msgstr "удалено:"
 
-#: wt-status.c:280
+#: wt-status.c:279
 msgid "modified:"
 msgstr "изменено:"
 
-#: wt-status.c:282
+#: wt-status.c:281
 msgid "renamed:"
 msgstr "переименовано:"
 
-#: wt-status.c:284
+#: wt-status.c:283
 msgid "typechange:"
 msgstr "изменен тип:"
 
-#: wt-status.c:286
+#: wt-status.c:285
 msgid "unknown:"
 msgstr "неизвестно:"
 
-#: wt-status.c:288
+#: wt-status.c:287
 msgid "unmerged:"
 msgstr "не слитые:"
 
-#: wt-status.c:370
+#: wt-status.c:369
 msgid "new commits, "
 msgstr "новые коммиты, "
 
-#: wt-status.c:372
+#: wt-status.c:371
 msgid "modified content, "
 msgstr "изменено содержимое, "
 
-#: wt-status.c:374
+#: wt-status.c:373
 msgid "untracked content, "
 msgstr "неотслеживаемое содержимое, "
 
-#: wt-status.c:391
+#: wt-status.c:390
 #, c-format
 msgid "bug: unhandled diff status %c"
 msgstr "ошибка: необработанный статус изменений %c"
 
-#: wt-status.c:755
+#: wt-status.c:754
 msgid "Submodules changed but not updated:"
 msgstr "Измененные, но не обновленные подмодули:"
 
-#: wt-status.c:757
+#: wt-status.c:756
 msgid "Submodule changes to be committed:"
 msgstr "Изменения в подмодулях, которые будут закоммичены:"
 
-#: wt-status.c:838
+#: wt-status.c:837
 msgid ""
 "Do not touch the line above.\n"
 "Everything below will be removed."
 msgstr "Не трогайте строку выше этой.\nВсё, что ниже — будет удалено."
 
-#: wt-status.c:949
+#: wt-status.c:948
 msgid "You have unmerged paths."
 msgstr "У вас есть не слитые пути."
 
-#: wt-status.c:952
+#: wt-status.c:951
 msgid "  (fix conflicts and run \"git commit\")"
 msgstr "  (разрешите конфликты, затем запустите «git commit»)"
 
-#: wt-status.c:955
+#: wt-status.c:954
 msgid "All conflicts fixed but you are still merging."
 msgstr "Все конфликты исправлены, но вы все еще в процессе слияния."
 
-#: wt-status.c:958
+#: wt-status.c:957
 msgid "  (use \"git commit\" to conclude merge)"
 msgstr "  (используйте «git commit», чтобы завершить слияние)"
 
-#: wt-status.c:968
+#: wt-status.c:967
 msgid "You are in the middle of an am session."
 msgstr "Вы в процессе сессии am."
 
-#: wt-status.c:971
+#: wt-status.c:970
 msgid "The current patch is empty."
 msgstr "Текущий патч пустой."
 
-#: wt-status.c:975
+#: wt-status.c:974
 msgid "  (fix conflicts and then run \"git am --continue\")"
 msgstr "  (разрешите конфликты, затем запустите «git am --continue»)"
 
-#: wt-status.c:977
+#: wt-status.c:976
 msgid "  (use \"git am --skip\" to skip this patch)"
 msgstr "  (используйте «git am --skip», чтобы пропустить этот патч)"
 
-#: wt-status.c:979
+#: wt-status.c:978
 msgid "  (use \"git am --abort\" to restore the original branch)"
 msgstr "  (используйте «git am --abort», чтобы восстановить оригинальную ветку)"
 
-#: wt-status.c:1039 wt-status.c:1056
+#: wt-status.c:1105
+msgid "No commands done."
+msgstr "Команды не выполнены."
+
+#: wt-status.c:1108
+#, c-format
+msgid "Last command done (%d command done):"
+msgid_plural "Last commands done (%d commands done):"
+msgstr[0] "Последняя команда выполнена (%d команд выполнено):"
+msgstr[1] "Последняя команда выполнена (%d команд выполнено):"
+msgstr[2] "Последняя команда выполнена (%d команд выполнено):"
+msgstr[3] "Последняя команда выполнена (%d команд выполнено):"
+
+#: wt-status.c:1119
+#, c-format
+msgid "  (see more in file %s)"
+msgstr "  (смотрите дополнительно в файле %s)"
+
+#: wt-status.c:1124
+msgid "No commands remaining."
+msgstr "Команд больше не осталось."
+
+#: wt-status.c:1127
+#, 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 команды осталось):"
+msgstr[2] "Следующая команда для выполнения (%d команд осталось):"
+msgstr[3] "Следующая команда для выполнения (%d команд осталось):"
+
+#: wt-status.c:1135
+msgid "  (use \"git rebase --edit-todo\" to view and edit)"
+msgstr "  (используйте «git rebase --edit-todo», чтобы просмотреть и изменить)"
+
+#: wt-status.c:1148
 #, c-format
 msgid "You are currently rebasing branch '%s' on '%s'."
 msgstr "Вы сейчас перемещаете ветку «%s» над «%s»."
 
-#: wt-status.c:1044 wt-status.c:1061
+#: wt-status.c:1153
 msgid "You are currently rebasing."
 msgstr "Вы сейчас перемещаете ветку."
 
-#: wt-status.c:1047
+#: wt-status.c:1167
 msgid "  (fix conflicts and then run \"git rebase --continue\")"
 msgstr "  (разрешите конфликты, затем запустите «git rebase --continue»)"
 
-#: wt-status.c:1049
+#: wt-status.c:1169
 msgid "  (use \"git rebase --skip\" to skip this patch)"
 msgstr "  (используйте «git rebase --skip», чтобы пропустить этот патч)"
 
-#: wt-status.c:1051
+#: wt-status.c:1171
 msgid "  (use \"git rebase --abort\" to check out the original branch)"
 msgstr "  (используйте «git rebase --abort», чтобы перейти на оригинальную ветку)"
 
-#: wt-status.c:1064
+#: wt-status.c:1177
 msgid "  (all conflicts fixed: run \"git rebase --continue\")"
 msgstr "  (все конфликты разрешены: запустите «git rebase --continue»)"
 
-#: wt-status.c:1068
+#: wt-status.c:1181
 #, c-format
 msgid ""
 "You are currently splitting a commit while rebasing branch '%s' on '%s'."
 msgstr "Вы сейчас разделяете коммит при перемещении ветки  «%s» над «%s»."
 
-#: wt-status.c:1073
+#: wt-status.c:1186
 msgid "You are currently splitting a commit during a rebase."
 msgstr "Вы сейчас разделяете коммит при перемещении ветки."
 
-#: wt-status.c:1076
+#: wt-status.c:1189
 msgid "  (Once your working directory is clean, run \"git rebase --continue\")"
 msgstr "(Как только ваш рабочий каталог будет чистый, запустите «git rebase --continue»)"
 
-#: wt-status.c:1080
+#: wt-status.c:1193
 #, c-format
 msgid "You are currently editing a commit while rebasing branch '%s' on '%s'."
 msgstr "Вы сейчас редактируете коммит при перемещении ветки  «%s» над «%s»."
 
-#: wt-status.c:1085
+#: wt-status.c:1198
 msgid "You are currently editing a commit during a rebase."
 msgstr "Вы сейчас редактируете коммит при перемещении ветки."
 
-#: wt-status.c:1088
+#: wt-status.c:1201
 msgid "  (use \"git commit --amend\" to amend the current commit)"
 msgstr "  (используйте «git commit --amend», чтобы исправить текущий коммит)"
 
-#: wt-status.c:1090
+#: wt-status.c:1203
 msgid "  (use \"git rebase --continue\" once you are satisfied with your changes)"
 msgstr "  (используйте «git rebase --continue», когда будете довольны изменениями)"
 
-#: wt-status.c:1100
+#: wt-status.c:1213
 #, c-format
 msgid "You are currently cherry-picking commit %s."
 msgstr "Вы сейчас отбираете лучший коммит %s."
 
-#: wt-status.c:1105
+#: wt-status.c:1218
 msgid "  (fix conflicts and run \"git cherry-pick --continue\")"
 msgstr "  (разрешите конфликты, затем запустите «git cherry-pick --continue»)"
 
-#: wt-status.c:1108
+#: wt-status.c:1221
 msgid "  (all conflicts fixed: run \"git cherry-pick --continue\")"
 msgstr "  (все конфликты разрешены: запустите «git cherry-pick --continue»)"
 
-#: wt-status.c:1110
+#: wt-status.c:1223
 msgid "  (use \"git cherry-pick --abort\" to cancel the cherry-pick operation)"
 msgstr "  (используйте «git cherry-pick --abort», чтобы отменить операцию отбора лучшего)"
 
-#: wt-status.c:1119
+#: wt-status.c:1232
 #, c-format
 msgid "You are currently reverting commit %s."
 msgstr "Вы сейчас возвращаете коммит %s."
 
-#: wt-status.c:1124
+#: wt-status.c:1237
 msgid "  (fix conflicts and run \"git revert --continue\")"
 msgstr "  (разрешите конфликты, затем запустите «git revert --continue»)"
 
-#: wt-status.c:1127
+#: wt-status.c:1240
 msgid "  (all conflicts fixed: run \"git revert --continue\")"
 msgstr "  (все конфликты разрешены: запустите «git revert --continue»)"
 
-#: wt-status.c:1129
+#: wt-status.c:1242
 msgid "  (use \"git revert --abort\" to cancel the revert operation)"
 msgstr "  (используйте «git revert --abort», чтобы отменить операцию возврата)"
 
-#: wt-status.c:1140
+#: wt-status.c:1253
 #, c-format
 msgid "You are currently bisecting, started from branch '%s'."
 msgstr "Вы сейчас в процессе двоичного поиска, начатого с ветки «%s»."
 
-#: wt-status.c:1144
+#: wt-status.c:1257
 msgid "You are currently bisecting."
 msgstr "Вы сейчас в процессе двоичного поиска."
 
-#: wt-status.c:1147
+#: wt-status.c:1260
 msgid "  (use \"git bisect reset\" to get back to the original branch)"
 msgstr "  (используйте «git bisect reset», чтобы вернуться на исходную ветку)"
 
-#: wt-status.c:1324
+#: wt-status.c:1437
 msgid "On branch "
 msgstr "На ветке "
 
-#: wt-status.c:1331
+#: wt-status.c:1445
+msgid "interactive rebase in progress; onto "
+msgstr "интерактивное перемещение в процессе; над "
+
+#: wt-status.c:1447
 msgid "rebase in progress; onto "
 msgstr "перемещение в процессе; над "
 
-#: wt-status.c:1336
+#: wt-status.c:1452
 msgid "HEAD detached at "
 msgstr "HEAD отделен на "
 
-#: wt-status.c:1338
+#: wt-status.c:1454
 msgid "HEAD detached from "
 msgstr "HEAD отделен начиная с "
 
-#: wt-status.c:1341
+#: wt-status.c:1457
 msgid "Not currently on any branch."
 msgstr "Сейчас ни на одной из веток"
 
-#: wt-status.c:1358
+#: wt-status.c:1474
 msgid "Initial commit"
 msgstr "Начальный коммит"
 
-#: wt-status.c:1372
+#: wt-status.c:1488
 msgid "Untracked files"
 msgstr "Неотслеживаемые файлы"
 
-#: wt-status.c:1374
+#: wt-status.c:1490
 msgid "Ignored files"
 msgstr "Игнорируемые файлы"
 
-#: wt-status.c:1378
+#: wt-status.c:1494
 #, c-format
 msgid ""
 "It took %.2f seconds to enumerate untracked files. 'status -uno'\n"
@@ -1896,78 +1994,78 @@ msgid ""
 "new files yourself (see 'git help status')."
 msgstr "%.2f секунды занял вывод списка неотслеживаемых файлов. «status -uno» возможно может ускорить это, но будьте внимательны, и не забудьте добавить новые файлы вручную (смотрите «git help status» для подробностей)."
 
-#: wt-status.c:1384
+#: wt-status.c:1500
 #, c-format
 msgid "Untracked files not listed%s"
 msgstr "Неотслеживаемые файлы не показаны%s"
 
-#: wt-status.c:1386
+#: wt-status.c:1502
 msgid " (use -u option to show untracked files)"
 msgstr "(используйте опцию «-u», чтобы показать неотслеживаемые файлы)"
 
-#: wt-status.c:1392
+#: wt-status.c:1508
 msgid "No changes"
 msgstr "Нет изменений"
 
-#: wt-status.c:1397
+#: wt-status.c:1513
 #, 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:1400
+#: wt-status.c:1516
 #, c-format
 msgid "no changes added to commit\n"
 msgstr "нет изменений добавленных для коммита\n"
 
-#: wt-status.c:1403
+#: wt-status.c:1519
 #, c-format
 msgid ""
 "nothing added to commit but untracked files present (use \"git add\" to "
 "track)\n"
 msgstr "ничего не добавлено в коммит, но есть неотслеживаемые файлы (используйте \"git add\", чтобы отслеживать их)\n"
 
-#: wt-status.c:1406
+#: wt-status.c:1522
 #, c-format
 msgid "nothing added to commit but untracked files present\n"
 msgstr "ничего не добавлено в коммит, но есть неотслеживаемые файлы\n"
 
-#: wt-status.c:1409
+#: wt-status.c:1525
 #, c-format
 msgid "nothing to commit (create/copy files and use \"git add\" to track)\n"
 msgstr "нечего коммитить (создайте/скопируйте файлы, затем запустите «git add», чтобы отслеживать их)\n"
 
-#: wt-status.c:1412 wt-status.c:1417
+#: wt-status.c:1528 wt-status.c:1533
 #, c-format
 msgid "nothing to commit\n"
 msgstr "нечего коммитить\n"
 
-#: wt-status.c:1415
+#: wt-status.c:1531
 #, c-format
 msgid "nothing to commit (use -u to show untracked files)\n"
 msgstr "нечего коммитить (используйте опцию «-u», чтобы показать неотслеживаемые файлы)\n"
 
-#: wt-status.c:1419
+#: wt-status.c:1535
 #, c-format
 msgid "nothing to commit, working directory clean\n"
 msgstr "нечего коммитить, нет изменений в рабочем каталоге\n"
 
-#: wt-status.c:1528
+#: wt-status.c:1644
 msgid "HEAD (no branch)"
 msgstr "HEAD (нет ветки)"
 
-#: wt-status.c:1534
+#: wt-status.c:1650
 msgid "Initial commit on "
 msgstr "Начальный коммит на "
 
-#: wt-status.c:1561
+#: wt-status.c:1677
 msgid "gone"
 msgstr "исчез"
 
-#: wt-status.c:1563 wt-status.c:1571
+#: wt-status.c:1679 wt-status.c:1687
 msgid "behind "
 msgstr "позади"
 
-#: compat/precompose_utf8.c:55 builtin/clone.c:345
+#: compat/precompose_utf8.c:55 builtin/clone.c:403
 #, c-format
 msgid "failed to unlink '%s'"
 msgstr "сбой отсоединения «%s»"
@@ -1994,7 +2092,7 @@ msgstr "удалить «%s»\n"
 msgid "Unstaged changes after refreshing the index:"
 msgstr "Непроиндексированные изменения после обновления индекса:"
 
-#: builtin/add.c:194 builtin/rev-parse.c:796
+#: builtin/add.c:194 builtin/rev-parse.c:799
 msgid "Could not read the index"
 msgstr "Не удалось прочитать индекс"
 
@@ -2029,15 +2127,15 @@ msgstr "Не удалось применить «%s»"
 msgid "The following paths are ignored by one of your .gitignore files:\n"
 msgstr "Следующие пути игнорируются одним из ваших файлов .gitignore:\n"
 
-#: builtin/add.c:249 builtin/clean.c:874 builtin/fetch.c:107 builtin/mv.c:110
-#: builtin/prune-packed.c:55 builtin/push.c:508 builtin/remote.c:1369
-#: builtin/rm.c:268
+#: builtin/add.c:249 builtin/clean.c:896 builtin/fetch.c:108 builtin/mv.c:110
+#: builtin/prune-packed.c:55 builtin/pull.c:182 builtin/push.c:545
+#: builtin/remote.c:1339 builtin/rm.c:268 builtin/send-pack.c:162
 msgid "dry run"
 msgstr "пробный запуск"
 
 #: builtin/add.c:250 builtin/apply.c:4580 builtin/check-ignore.c:19
-#: builtin/commit.c:1322 builtin/count-objects.c:63 builtin/fsck.c:616
-#: builtin/log.c:1617 builtin/mv.c:109 builtin/read-tree.c:114
+#: builtin/commit.c:1321 builtin/count-objects.c:63 builtin/fsck.c:636
+#: builtin/log.c:1641 builtin/mv.c:109 builtin/read-tree.c:114
 msgid "be verbose"
 msgstr "быть многословнее"
 
@@ -2045,7 +2143,7 @@ msgstr "быть многословнее"
 msgid "interactive picking"
 msgstr "интерактивный выбор"
 
-#: builtin/add.c:253 builtin/checkout.c:1221 builtin/reset.c:286
+#: builtin/add.c:253 builtin/checkout.c:1152 builtin/reset.c:286
 msgid "select hunks interactively"
 msgstr "интерактивный выбор блоков"
 
@@ -2112,15 +2210,403 @@ msgstr "Ничего не указано, ничего не добавлено.\
 msgid "Maybe you wanted to say 'git add .'?\n"
 msgstr "Возможно, вы имели в виду «git add .»?\n"
 
-#: builtin/add.c:364 builtin/check-ignore.c:172 builtin/clean.c:918
-#: builtin/commit.c:335 builtin/mv.c:130 builtin/reset.c:235 builtin/rm.c:298
+#: builtin/add.c:364 builtin/check-ignore.c:172 builtin/clean.c:940
+#: builtin/commit.c:336 builtin/mv.c:130 builtin/reset.c:235 builtin/rm.c:298
 msgid "index file corrupt"
 msgstr "файл индекса поврежден"
 
-#: builtin/add.c:447 builtin/apply.c:4678 builtin/mv.c:279 builtin/rm.c:430
+#: builtin/add.c:445 builtin/apply.c:4678 builtin/mv.c:279 builtin/rm.c:430
 msgid "Unable to write new index file"
 msgstr "Не удалось записать новый файл индекса"
 
+#: builtin/am.c:41
+#, c-format
+msgid "could not stat %s"
+msgstr "не удалось выполнить stat для %s"
+
+#: builtin/am.c:270 builtin/am.c:1345 builtin/commit.c:737
+#: builtin/merge.c:1079
+#, c-format
+msgid "could not read '%s'"
+msgstr "не удалось прочитать «%s»"
+
+#: builtin/am.c:444
+msgid "could not parse author script"
+msgstr "не удалось разобрать сценарий авторства"
+
+#: builtin/am.c:521
+#, c-format
+msgid "'%s' was deleted by the applypatch-msg hook"
+msgstr "«%s» был удален перехватчиком applypatch-msg"
+
+#: builtin/am.c:562 builtin/notes.c:300
+#, c-format
+msgid "Malformed input line: '%s'."
+msgstr "Плохая строка ввода: «%s»."
+
+#: builtin/am.c:599 builtin/notes.c:315
+#, c-format
+msgid "Failed to copy notes from '%s' to '%s'"
+msgstr "Не удалось скопировать заметку из «%s» в «%s»"
+
+#: builtin/am.c:625
+msgid "fseek failed"
+msgstr "сбой при выполнении fseek"
+
+#: builtin/am.c:786 builtin/am.c:874
+#, c-format
+msgid "could not open '%s' for reading: %s"
+msgstr "не удалось открыть «%s» для чтения: %s"
+
+#: builtin/am.c:793
+#, c-format
+msgid "could not open '%s' for writing: %s"
+msgstr "не удалось открыть «%s» для записи: %s"
+
+#: builtin/am.c:802
+#, c-format
+msgid "could not parse patch '%s'"
+msgstr "не удалось разобрать патч «%s»"
+
+#: builtin/am.c:867
+msgid "Only one StGIT patch series can be applied at once"
+msgstr "Только серия патчей StGIT может быть применена за раз"
+
+#: builtin/am.c:915
+msgid "invalid timestamp"
+msgstr "недопустимая метка даты/времени"
+
+#: builtin/am.c:918 builtin/am.c:926
+msgid "invalid Date line"
+msgstr "недопустимая строка даты"
+
+#: builtin/am.c:923
+msgid "invalid timezone offset"
+msgstr "недопустимое смещение часового пояса"
+
+#: builtin/am.c:1010
+msgid "Patch format detection failed."
+msgstr "Сбой определения формата патча."
+
+#: builtin/am.c:1015 builtin/clone.c:368
+#, c-format
+msgid "failed to create directory '%s'"
+msgstr "не удалось создать каталог «%s»"
+
+#: builtin/am.c:1019
+msgid "Failed to split patches."
+msgstr "Не удалось разделить патчи на части."
+
+#: builtin/am.c:1151 builtin/commit.c:362
+msgid "unable to write index file"
+msgstr "не удалось записать индекс"
+
+#: builtin/am.c:1202
+#, c-format
+msgid "When you have resolved this problem, run \"%s --continue\"."
+msgstr "Когда вы устраните эту проблему, запустите «%s --continue»."
+
+#: builtin/am.c:1203
+#, c-format
+msgid "If you prefer to skip this patch, run \"%s --skip\" instead."
+msgstr "Если вы хотите пропустить этот патч, то запустите «%s --skip»."
+
+#: builtin/am.c:1204
+#, c-format
+msgid "To restore the original branch and stop patching, run \"%s --abort\"."
+msgstr "Чтобы вернуться на предыдущую ветку и остановить применение изменений, запустите «%s --abort»."
+
+#: builtin/am.c:1339
+msgid "Patch is empty. Was it split wrong?"
+msgstr "Патч пуст. Возможно, он был неправильно разделён?"
+
+#: builtin/am.c:1413 builtin/log.c:1345
+#, c-format
+msgid "invalid ident line: %s"
+msgstr "неправильная строка идентификации: %s"
+
+#: builtin/am.c:1440
+#, c-format
+msgid "unable to parse commit %s"
+msgstr "не удалось разобрать коммит %s"
+
+#: builtin/am.c:1614
+msgid "Repository lacks necessary blobs to fall back on 3-way merge."
+msgstr "В репозитории отсутствуют двоичные объекты, необходимые для отката к трехходовому слиянию."
+
+#: builtin/am.c:1616
+msgid "Using index info to reconstruct a base tree..."
+msgstr "Использую индекс для реконструкции базового дерева…"
+
+#: builtin/am.c:1635
+msgid ""
+"Did you hand edit your patch?\n"
+"It does not apply to blobs recorded in its index."
+msgstr "Вы вручную изменяли патч?\nОн не накладывается без ошибок на двоичные объекты, записанные в его заголовке."
+
+#: builtin/am.c:1641
+msgid "Falling back to patching base and 3-way merge..."
+msgstr "Откат к применению изменений к базовому коммиту с помощью трехходового слияния…"
+
+#: builtin/am.c:1666
+msgid "Failed to merge in the changes."
+msgstr "Не удалось слить изменения."
+
+#: builtin/am.c:1691 builtin/merge.c:632
+msgid "git write-tree failed to write a tree"
+msgstr "git write-tree не удалось записать дерево"
+
+#: builtin/am.c:1698
+msgid "applying to an empty history"
+msgstr "применение к пустой истории"
+
+#: builtin/am.c:1711 builtin/commit.c:1752 builtin/merge.c:829
+#: builtin/merge.c:854
+msgid "failed to write commit object"
+msgstr "сбой записи объекта коммита"
+
+#: builtin/am.c:1743 builtin/am.c:1747
+#, c-format
+msgid "cannot resume: %s does not exist."
+msgstr "нельзя продолжнить: %s не существует "
+
+#: builtin/am.c:1763
+msgid "cannot be interactive without stdin connected to a terminal."
+msgstr "не удалось использовать интерактивное поведение, без stdin подключенного к терминалу."
+
+#: builtin/am.c:1768
+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:1778
+msgid "Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all: "
+msgstr "Применить? [y] - да/[n] - нет/[e] - редактировать/[v] - просмотреть патч/[a] - применить всё: "
+
+#: builtin/am.c:1828
+#, c-format
+msgid "Dirty index: cannot apply patches (dirty: %s)"
+msgstr "Индекс не пустой: нельзя применять патчи (в индексе: %s)"
+
+#: builtin/am.c:1863 builtin/am.c:1934
+#, c-format
+msgid "Applying: %.*s"
+msgstr "Применение: %.*s"
+
+#: builtin/am.c:1879
+msgid "No changes -- Patch already applied."
+msgstr "Нет изменений — Патч уже применен."
+
+#: builtin/am.c:1887
+#, c-format
+msgid "Patch failed at %s %.*s"
+msgstr "Ошибка применения изменений на %s %.*s"
+
+#: builtin/am.c:1893
+#, c-format
+msgid "The copy of the patch that failed is found in: %s"
+msgstr "Копию изменений, которые не удалось применить, вы можете найти в: %s"
+
+#: builtin/am.c:1937
+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:1944
+msgid ""
+"You still have unmerged paths in your index.\n"
+"Did you forget to use 'git add'?"
+msgstr "У вас все еще имеются не слитые пути в индексе.\nВозможно, вы забыли вызвать «git add»?"
+
+#: builtin/am.c:2052 builtin/am.c:2056 builtin/am.c:2068 builtin/reset.c:308
+#: builtin/reset.c:316
+#, c-format
+msgid "Could not parse object '%s'."
+msgstr "Не удалось разобрать объект «%s»."
+
+#: builtin/am.c:2104
+msgid "failed to clean index"
+msgstr "не удалось очистить индекс"
+
+#: builtin/am.c:2138
+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:2199
+#, c-format
+msgid "Invalid value for --patch-format: %s"
+msgstr "Неправильное значение для --patch-format: %s"
+
+#: builtin/am.c:2221
+msgid "git am [options] [(<mbox>|<Maildir>)...]"
+msgstr "git am [опции] [(<mbox>|<Maildir>)…]"
+
+#: builtin/am.c:2222
+msgid "git am [options] (--continue | --skip | --abort)"
+msgstr "git am [опции] (--continue | --skip | --abort)"
+
+#: builtin/am.c:2228
+msgid "run interactively"
+msgstr "запустить в интерактивном режиме"
+
+#: builtin/am.c:2230
+msgid "historical option -- no-op"
+msgstr "историческая опция — ничего не делает"
+
+#: builtin/am.c:2232
+msgid "allow fall back on 3way merging if needed"
+msgstr "разрешить откатиться к трехходовому слиянию, если нужно"
+
+#: builtin/am.c:2233 builtin/init-db.c:509 builtin/prune-packed.c:57
+#: builtin/repack.c:171
+msgid "be quiet"
+msgstr "тихий режим"
+
+#: builtin/am.c:2235
+msgid "add a Signed-off-by line to the commit message"
+msgstr "добавить строку Signed-off-by к сообщению коммита"
+
+#: builtin/am.c:2238
+msgid "recode into utf8 (default)"
+msgstr "перекодировать в utf8 (по умолчанию)"
+
+#: builtin/am.c:2240
+msgid "pass -k flag to git-mailinfo"
+msgstr "передать флаг -k в git-mailinfo"
+
+#: builtin/am.c:2242
+msgid "pass -b flag to git-mailinfo"
+msgstr "передать флаг -b в git-mailinfo"
+
+#: builtin/am.c:2244
+msgid "pass -m flag to git-mailinfo"
+msgstr "передать флаг -m в git-mailinfo"
+
+#: builtin/am.c:2246
+msgid "pass --keep-cr flag to git-mailsplit for mbox format"
+msgstr "передать флаг --keep-cr в git-mailsplit для формата mbox"
+
+#: builtin/am.c:2249
+msgid "do not pass --keep-cr flag to git-mailsplit independent of am.keepcr"
+msgstr "не передавать --keep-cr флаг в git-mailsplit вне зависимости от am.keepcr"
+
+#: builtin/am.c:2252
+msgid "strip everything before a scissors line"
+msgstr "обрезать все до строки обрезки"
+
+#: builtin/am.c:2253 builtin/apply.c:4563
+msgid "action"
+msgstr "действие"
+
+#: builtin/am.c:2254 builtin/am.c:2257 builtin/am.c:2260 builtin/am.c:2263
+#: builtin/am.c:2266 builtin/am.c:2269 builtin/am.c:2272 builtin/am.c:2275
+#: builtin/am.c:2281
+msgid "pass it through git-apply"
+msgstr "передать его в git-apply"
+
+#: builtin/am.c:2262 builtin/apply.c:4587
+msgid "root"
+msgstr "корень"
+
+#: builtin/am.c:2265 builtin/am.c:2268 builtin/apply.c:4525
+#: builtin/apply.c:4528 builtin/clone.c:85 builtin/fetch.c:93
+#: builtin/pull.c:167
+msgid "path"
+msgstr "путь"
+
+#: builtin/am.c:2271 builtin/fmt-merge-msg.c:669 builtin/fmt-merge-msg.c:672
+#: builtin/grep.c:698 builtin/merge.c:198 builtin/pull.c:127
+#: builtin/repack.c:178 builtin/repack.c:182 builtin/show-branch.c:664
+#: builtin/show-ref.c:180 builtin/tag.c:591 parse-options.h:132
+#: parse-options.h:134 parse-options.h:243
+msgid "n"
+msgstr "n"
+
+#: builtin/am.c:2274 builtin/apply.c:4531
+msgid "num"
+msgstr "количество"
+
+#: builtin/am.c:2277 builtin/for-each-ref.c:34 builtin/replace.c:438
+msgid "format"
+msgstr "формат"
+
+#: builtin/am.c:2278
+msgid "format the patch(es) are in"
+msgstr "формат, в котором находятся патчи"
+
+#: builtin/am.c:2284
+msgid "override error message when patch failure occurs"
+msgstr "переопределить сообщение об ошибке, если не удалось наложить изменения"
+
+#: builtin/am.c:2286
+msgid "continue applying patches after resolving a conflict"
+msgstr "продолжить применение изменений после разрешения конфиликта"
+
+#: builtin/am.c:2289
+msgid "synonyms for --continue"
+msgstr "синонимы для --continue"
+
+#: builtin/am.c:2292
+msgid "skip the current patch"
+msgstr "пропустить текущий патч"
+
+#: builtin/am.c:2295
+msgid "restore the original branch and abort the patching operation."
+msgstr "восстановить оригинальную ветку и отменить операцию применения изменений."
+
+#: builtin/am.c:2299
+msgid "lie about committer date"
+msgstr "соврать о дате коммитера"
+
+#: builtin/am.c:2301
+msgid "use current timestamp for author date"
+msgstr "использовать текущее время как время авторства"
+
+#: builtin/am.c:2303 builtin/commit.c:1590 builtin/merge.c:225
+#: builtin/pull.c:155 builtin/revert.c:92 builtin/tag.c:606
+msgid "key-id"
+msgstr "key-id"
+
+#: builtin/am.c:2304
+msgid "GPG-sign commits"
+msgstr "подписать коммиты с помощью GPG"
+
+#: builtin/am.c:2307
+msgid "(internal use for git-rebase)"
+msgstr "(внутреннее использование для git-rebase)"
+
+#: builtin/am.c:2322
+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:2329
+msgid "failed to read the index"
+msgstr "сбой чтения индекса"
+
+#: builtin/am.c:2344
+#, c-format
+msgid "previous rebase directory %s still exists but mbox given."
+msgstr "предыдущий каталог перемещения %s еще существует, но передан mbox."
+
+#: builtin/am.c:2368
+#, c-format
+msgid ""
+"Stray %s directory found.\n"
+"Use \"git am --abort\" to remove it."
+msgstr "Найден забытый каталог %s.\nИспользуйте «git am --abort», чтобы удалить его."
+
+#: builtin/am.c:2374
+msgid "Resolve operation not in progress, we are not resuming."
+msgstr "Операция разрешения конфликтов не в процессе выполнения, не продолжаем."
+
 #: builtin/apply.c:59
 msgid "git apply [<options>] [<patch>...]"
 msgstr "git apply [<опции>] [<патч>…]"
@@ -2381,7 +2867,7 @@ msgstr "%s: не удалось применить патч"
 msgid "Checking patch %s..."
 msgstr "Проверка патча %s…"
 
-#: builtin/apply.c:3909 builtin/checkout.c:233 builtin/reset.c:135
+#: builtin/apply.c:3909 builtin/checkout.c:232 builtin/reset.c:135
 #, c-format
 msgid "make_cache_entry failed for path '%s'"
 msgstr "сбой make_cache_entry для пути «%s»"
@@ -2462,11 +2948,6 @@ msgstr "не распознанный ввод"
 msgid "unable to read index file"
 msgstr "не удалось прочитать файл индекса"
 
-#: builtin/apply.c:4525 builtin/apply.c:4528 builtin/clone.c:85
-#: builtin/fetch.c:92
-msgid "path"
-msgstr "путь"
-
 #: builtin/apply.c:4526
 msgid "don't apply changes matching the given path"
 msgstr "не применять изменения по указанному пути"
@@ -2475,10 +2956,6 @@ msgstr "не применять изменения по указанному п
 msgid "apply changes matching the given path"
 msgstr "применять изменения по указанному пути"
 
-#: builtin/apply.c:4531
-msgid "num"
-msgstr "количество"
-
 #: builtin/apply.c:4532
 msgid "remove <num> leading slashes from traditional diff paths"
 msgstr "удалить <количество> ведущих косых черт из традиционных путей списка изменений"
@@ -2535,10 +3012,6 @@ msgstr "пути, отделенные НУЛЕВЫМ символом"
 msgid "ensure at least <n> lines of context match"
 msgstr "удостовериться, что по крайней мере <n> строк контекста совпадают"
 
-#: builtin/apply.c:4563
-msgid "action"
-msgstr "действие"
-
 #: builtin/apply.c:4564
 msgid "detect new or modified lines that have whitespace errors"
 msgstr "определять новые или модифицированные строки, у которых есть ошибки в пробельных символах"
@@ -2571,10 +3044,6 @@ msgstr "разрешить некорректно определенные пр
 msgid "do not trust the line counts in the hunk headers"
 msgstr "не доверять количеству строк из заголовка блока изменений"
 
-#: builtin/apply.c:4587
-msgid "root"
-msgstr "корень"
-
 #: builtin/apply.c:4588
 msgid "prepend <root> to all filenames"
 msgstr "добавить <корень> спереди ко всем именам файлов"
@@ -2661,11 +3130,11 @@ msgstr "выполнить «git bisect next»"
 msgid "update BISECT_HEAD instead of checking out the current commit"
 msgstr "обновить BISECT_HEAD вместо перехода на текущий коммит"
 
-#: builtin/blame.c:31
+#: builtin/blame.c:32
 msgid "git blame [<options>] [<rev-opts>] [<rev>] [--] <file>"
 msgstr "git blame [<опции>] [<опции-редакции>] [<редакция>] [--] <файл>"
 
-#: builtin/blame.c:36
+#: builtin/blame.c:37
 msgid "<rev-opts> are documented in git-rev-list(1)"
 msgstr "<опции-rev-list> документированы в git-rev-list(1)"
 
@@ -2840,323 +3309,323 @@ msgstr "внешняя отслеживаемая ветка «%s» не най
 msgid "branch '%s' not found."
 msgstr "ветка «%s» не найдена."
 
-#: builtin/branch.c:258
+#: builtin/branch.c:259
 #, c-format
 msgid "Error deleting remote-tracking branch '%s'"
 msgstr "Ошибка удаления внешней отслеживаемой ветки «%s»"
 
-#: builtin/branch.c:259
+#: builtin/branch.c:260
 #, c-format
 msgid "Error deleting branch '%s'"
 msgstr "Ошибка удаления ветки «%s»"
 
-#: builtin/branch.c:266
+#: builtin/branch.c:267
 #, c-format
 msgid "Deleted remote-tracking branch %s (was %s).\n"
 msgstr "Внешняя отслеживаемая ветка %s удалена (была %s).\n"
 
-#: builtin/branch.c:267
+#: builtin/branch.c:268
 #, c-format
 msgid "Deleted branch %s (was %s).\n"
 msgstr "Ветка %s удалена (была %s).\n"
 
-#: builtin/branch.c:368
+#: builtin/branch.c:369
 #, c-format
 msgid "branch '%s' does not point at a commit"
 msgstr "ветка «%s» не указывает на коммит"
 
-#: builtin/branch.c:451
+#: builtin/branch.c:452
 #, c-format
 msgid "[%s: gone]"
 msgstr "[%s: пропал]"
 
-#: builtin/branch.c:456
+#: builtin/branch.c:457
 #, c-format
 msgid "[%s]"
 msgstr "[%s]"
 
-#: builtin/branch.c:461
+#: builtin/branch.c:462
 #, c-format
 msgid "[%s: behind %d]"
 msgstr "[%s: позади %d]"
 
-#: builtin/branch.c:463
+#: builtin/branch.c:464
 #, c-format
 msgid "[behind %d]"
 msgstr "[позади %d]"
 
-#: builtin/branch.c:467
+#: builtin/branch.c:468
 #, c-format
 msgid "[%s: ahead %d]"
 msgstr "[%s: впереди %d]"
 
-#: builtin/branch.c:469
+#: builtin/branch.c:470
 #, c-format
 msgid "[ahead %d]"
 msgstr "[впереди %d]"
 
-#: builtin/branch.c:472
+#: builtin/branch.c:473
 #, c-format
 msgid "[%s: ahead %d, behind %d]"
 msgstr "[%s: впереди %d, позади %d]"
 
-#: builtin/branch.c:475
+#: builtin/branch.c:476
 #, c-format
 msgid "[ahead %d, behind %d]"
 msgstr "[впереди %d, позади %d]"
 
-#: builtin/branch.c:488
+#: builtin/branch.c:489
 msgid " **** invalid ref ****"
 msgstr " **** недействительная ссылка ****"
 
-#: builtin/branch.c:579
+#: builtin/branch.c:580
 #, c-format
 msgid "(no branch, rebasing %s)"
 msgstr "(нет ветки, перемещение %s)"
 
-#: builtin/branch.c:582
+#: builtin/branch.c:583
 #, c-format
 msgid "(no branch, bisect started on %s)"
 msgstr "(нет ветки, двоичный поиск начат на %s)"
 
-#: builtin/branch.c:588
+#: builtin/branch.c:589
 #, c-format
 msgid "(HEAD detached at %s)"
 msgstr "(HEAD отделён на %s)"
 
-#: builtin/branch.c:591
+#: builtin/branch.c:592
 #, c-format
 msgid "(HEAD detached from %s)"
 msgstr "(HEAD отделён начиная с %s)"
 
-#: builtin/branch.c:595
+#: builtin/branch.c:596
 msgid "(no branch)"
 msgstr "(нет ветки)"
 
-#: builtin/branch.c:642
+#: builtin/branch.c:643
 #, c-format
 msgid "object '%s' does not point to a commit"
 msgstr "объект «%s» не указывает на коммит"
 
-#: builtin/branch.c:690
+#: builtin/branch.c:691
 msgid "some refs could not be read"
 msgstr "не удается прочитать некоторые ссылки"
 
-#: builtin/branch.c:703
+#: builtin/branch.c:704
 msgid "cannot rename the current branch while not on any."
 msgstr "невозможно переименовать текущую ветку, если вы не находитесь ни на одной из них."
 
-#: builtin/branch.c:713
+#: builtin/branch.c:714
 #, c-format
 msgid "Invalid branch name: '%s'"
 msgstr "Недействительное имя ветки: «%s»"
 
-#: builtin/branch.c:728
+#: builtin/branch.c:729
 msgid "Branch rename failed"
 msgstr "Сбой переименования ветки"
 
-#: builtin/branch.c:732
+#: builtin/branch.c:733
 #, c-format
 msgid "Renamed a misnamed branch '%s' away"
 msgstr "Переименована неправильно названная ветка «%s»"
 
-#: builtin/branch.c:736
+#: builtin/branch.c:737
 #, c-format
 msgid "Branch renamed to %s, but HEAD is not updated!"
 msgstr "Ветка переименована в %s, но HEAD не обновлен!"
 
-#: builtin/branch.c:743
+#: builtin/branch.c:744
 msgid "Branch is renamed, but update of config-file failed"
 msgstr "Ветка переименована, но произошел сбой обновления файла конфигурации"
 
-#: builtin/branch.c:758
+#: builtin/branch.c:759
 #, c-format
 msgid "malformed object name %s"
 msgstr "плохое имя объекта %s"
 
-#: builtin/branch.c:780
+#: builtin/branch.c:781
 #, c-format
 msgid "could not write branch description template: %s"
 msgstr "не удалось записать шаблон описания ветки: %s"
 
-#: builtin/branch.c:810
+#: builtin/branch.c:811
 msgid "Generic options"
 msgstr "Общие параметры"
 
-#: builtin/branch.c:812
+#: builtin/branch.c:813
 msgid "show hash and subject, give twice for upstream branch"
 msgstr "показывать хеш-сумму и тему, укажите дважды для вышестоящей ветки"
 
-#: builtin/branch.c:813
+#: builtin/branch.c:814
 msgid "suppress informational messages"
 msgstr "не выводить информационные сообщения"
 
-#: builtin/branch.c:814
+#: builtin/branch.c:815
 msgid "set up tracking mode (see git-pull(1))"
 msgstr "установить режим отслеживания вышестоящей ветки (см. git-pull(1))"
 
-#: builtin/branch.c:816
+#: builtin/branch.c:817
 msgid "change upstream info"
 msgstr "изменить информацию о вышестоящей ветке"
 
-#: builtin/branch.c:820
+#: builtin/branch.c:821
 msgid "use colored output"
 msgstr "использовать цветной вывод"
 
-#: builtin/branch.c:821
+#: builtin/branch.c:822
 msgid "act on remote-tracking branches"
 msgstr "выполнить действия на отслеживаемых внешних ветках"
 
-#: builtin/branch.c:824 builtin/branch.c:830 builtin/branch.c:851
-#: builtin/branch.c:857 builtin/commit.c:1581 builtin/commit.c:1582
-#: builtin/commit.c:1583 builtin/commit.c:1584 builtin/tag.c:616
-#: builtin/tag.c:622
+#: builtin/branch.c:825 builtin/branch.c:831 builtin/branch.c:852
+#: builtin/branch.c:858 builtin/commit.c:1580 builtin/commit.c:1581
+#: builtin/commit.c:1582 builtin/commit.c:1583 builtin/tag.c:618
+#: builtin/tag.c:624
 msgid "commit"
 msgstr "коммит"
 
-#: builtin/branch.c:825 builtin/branch.c:831
+#: builtin/branch.c:826 builtin/branch.c:832
 msgid "print only branches that contain the commit"
 msgstr "вывод только веток, которые содержат коммит"
 
-#: builtin/branch.c:837
+#: builtin/branch.c:838
 msgid "Specific git-branch actions:"
 msgstr "Специфичные для git-branch действия:"
 
-#: builtin/branch.c:838
+#: builtin/branch.c:839
 msgid "list both remote-tracking and local branches"
 msgstr "показать список и отслеживаемых и локальных веток"
 
-#: builtin/branch.c:840
+#: builtin/branch.c:841
 msgid "delete fully merged branch"
 msgstr "удалить полностью слитую ветку"
 
-#: builtin/branch.c:841
+#: builtin/branch.c:842
 msgid "delete branch (even if not merged)"
 msgstr "удалить ветку (даже никуда не слитую)"
 
-#: builtin/branch.c:842
+#: builtin/branch.c:843
 msgid "move/rename a branch and its reflog"
 msgstr "переместить/переименовать ветки и ее журнал ссылок"
 
-#: builtin/branch.c:843
+#: builtin/branch.c:844
 msgid "move/rename a branch, even if target exists"
 msgstr "переместить/переименовать ветку, даже если целевое имя уже существует"
 
-#: builtin/branch.c:844
+#: builtin/branch.c:845
 msgid "list branch names"
 msgstr "показать список имен веток"
 
-#: builtin/branch.c:845
+#: builtin/branch.c:846
 msgid "create the branch's reflog"
 msgstr "создать журнал ссылок ветки"
 
-#: builtin/branch.c:847
+#: builtin/branch.c:848
 msgid "edit the description for the branch"
 msgstr "изменить описание ветки"
 
-#: builtin/branch.c:848
+#: builtin/branch.c:849
 msgid "force creation, move/rename, deletion"
 msgstr "принудительное создание, перемещение или удаление ветки"
 
-#: builtin/branch.c:851
+#: builtin/branch.c:852
 msgid "print only not merged branches"
 msgstr "вывод только не слитых веток"
 
-#: builtin/branch.c:857
+#: builtin/branch.c:858
 msgid "print only merged branches"
 msgstr "вывод только слитых веток"
 
-#: builtin/branch.c:861
+#: builtin/branch.c:862
 msgid "list branches in columns"
 msgstr "показать список веток по столбцам"
 
-#: builtin/branch.c:874
+#: builtin/branch.c:875
 msgid "Failed to resolve HEAD as a valid ref."
 msgstr "Не удалось определить HEAD как действительную ссылку."
 
-#: builtin/branch.c:878 builtin/clone.c:622
+#: builtin/branch.c:879 builtin/clone.c:690
 msgid "HEAD not found below refs/heads!"
 msgstr "HEAD не найден в refs/heads!"
 
-#: builtin/branch.c:900
+#: builtin/branch.c:901
 msgid "--column and --verbose are incompatible"
 msgstr "--column и --verbose нельзя использовать одновременно"
 
-#: builtin/branch.c:911 builtin/branch.c:950
+#: builtin/branch.c:912 builtin/branch.c:951
 msgid "branch name required"
 msgstr "требуется имя ветки"
 
-#: builtin/branch.c:926
+#: builtin/branch.c:927
 msgid "Cannot give description to detached HEAD"
 msgstr "Нельзя дать описание отделенному HEAD"
 
-#: builtin/branch.c:931
+#: builtin/branch.c:932
 msgid "cannot edit description of more than one branch"
 msgstr "нельзя изменить описание более одной ветки за раз"
 
-#: builtin/branch.c:938
+#: builtin/branch.c:939
 #, c-format
 msgid "No commit on branch '%s' yet."
 msgstr "Еще нет коммита на ветке «%s»."
 
-#: builtin/branch.c:941
+#: builtin/branch.c:942
 #, c-format
 msgid "No branch named '%s'."
 msgstr "Нет ветки с именем «%s»."
 
-#: builtin/branch.c:956
+#: builtin/branch.c:957
 msgid "too many branches for a rename operation"
 msgstr "слишком много веток для операции переименования"
 
-#: builtin/branch.c:961
+#: builtin/branch.c:962
 msgid "too many branches to set new upstream"
 msgstr "слишком много веток для указания новых вышестоящих"
 
-#: builtin/branch.c:965
+#: builtin/branch.c:966
 #, 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:968 builtin/branch.c:990 builtin/branch.c:1011
+#: builtin/branch.c:969 builtin/branch.c:991 builtin/branch.c:1012
 #, c-format
 msgid "no such branch '%s'"
 msgstr "нет такой ветки «%s»"
 
-#: builtin/branch.c:972
+#: builtin/branch.c:973
 #, c-format
 msgid "branch '%s' does not exist"
 msgstr "ветка «%s» не существует"
 
-#: builtin/branch.c:984
+#: builtin/branch.c:985
 msgid "too many branches to unset upstream"
 msgstr "слишком много веток для убирания вышестоящих"
 
-#: builtin/branch.c:988
+#: builtin/branch.c:989
 msgid "could not unset upstream of HEAD when it does not point to any branch."
 msgstr "невозможно убрать вышестоящий репозиторий для HEAD, когда он не указывает ни на одну ветку."
 
-#: builtin/branch.c:994
+#: builtin/branch.c:995
 #, c-format
 msgid "Branch '%s' has no upstream information"
 msgstr "Ветка «%s» не имеет информации о вышестоящей ветке"
 
-#: builtin/branch.c:1008
+#: builtin/branch.c:1009
 msgid "it does not make sense to create 'HEAD' manually"
 msgstr "не имеет смысла создавать «HEAD» вручную"
 
-#: builtin/branch.c:1014
+#: builtin/branch.c:1015
 msgid "-a and -r options to 'git branch' do not make sense with a branch name"
 msgstr "параметры -a и -r для «git branch» не имеют смысла с указанием имени ветки"
 
-#: builtin/branch.c:1017
+#: builtin/branch.c:1018
 #, c-format
 msgid ""
 "The --set-upstream flag is deprecated and will be removed. Consider using "
 "--track or --set-upstream-to\n"
 msgstr "Флаг --set-upstream устарел и будет удален в будущем. Вместо него используйте --track или --set-upstream-to\n"
 
-#: builtin/branch.c:1034
+#: builtin/branch.c:1035
 #, c-format
 msgid ""
 "\n"
@@ -3164,12 +3633,12 @@ msgid ""
 "\n"
 msgstr "\nЕсли вы хотите, чтобы «%s» отслеживала «%s», сделайте следующее:\n\n"
 
-#: builtin/branch.c:1035
+#: builtin/branch.c:1036
 #, c-format
 msgid "    git branch -d %s\n"
 msgstr "git branch -d %s\n"
 
-#: builtin/branch.c:1036
+#: builtin/branch.c:1037
 #, c-format
 msgid "    git branch --set-upstream-to %s\n"
 msgstr "    git branch --set-upstream-to %s\n"
@@ -3187,58 +3656,66 @@ msgstr "Требуется репозиторий для создания пак
 msgid "Need a repository to unbundle."
 msgstr "Требуется репозиторий для распаковки."
 
-#: builtin/cat-file.c:369
+#: builtin/cat-file.c:428
 msgid ""
 "git cat-file (-t [--allow-unknown-type]|-s [--allow-unknown-"
 "type]|-e|-p|<type>|--textconv) <object>"
 msgstr "git cat-file (-t [--allow-unknown-type]|-s [--allow-unknown-type]|-e|-p|<тип>|--textconv) <объект>"
 
-#: builtin/cat-file.c:370
+#: builtin/cat-file.c:429
 msgid ""
 "git cat-file (--batch | --batch-check) [--follow-symlinks] < <list-of-"
 "objects>"
 msgstr "git cat-file (--batch | --batch-check) [--follow-symlinks] < <список-объектов>"
 
-#: builtin/cat-file.c:407
+#: builtin/cat-file.c:466
 msgid "<type> can be one of: blob, tree, commit, tag"
 msgstr "<тип> может быть одним из: blob, tree, commit, tag"
 
-#: builtin/cat-file.c:408
+#: builtin/cat-file.c:467
 msgid "show object type"
 msgstr "показать тип объекта"
 
-#: builtin/cat-file.c:409
+#: builtin/cat-file.c:468
 msgid "show object size"
 msgstr "показать размер объекта"
 
-#: builtin/cat-file.c:411
+#: builtin/cat-file.c:470
 msgid "exit with zero when there's no error"
 msgstr "выйти с нулевым кодом возврата, если нет ошибки"
 
-#: builtin/cat-file.c:412
+#: builtin/cat-file.c:471
 msgid "pretty-print object's content"
 msgstr "структурированный вывод содержимого объекта"
 
-#: builtin/cat-file.c:414
+#: builtin/cat-file.c:473
 msgid "for blob objects, run textconv on object's content"
 msgstr "запустить texconv на содержимом двоичных объектов "
 
-#: builtin/cat-file.c:416
+#: builtin/cat-file.c:475
 msgid "allow -s and -t to work with broken/corrupt objects"
 msgstr "разрешить -s и -t работать с повреждёнными объектами"
 
-#: builtin/cat-file.c:418
+#: builtin/cat-file.c:476
+msgid "buffer --batch output"
+msgstr "буфферировать вывод --batch"
+
+#: builtin/cat-file.c:478
 msgid "show info and content of objects fed from the standard input"
 msgstr "показать информацию и содержимое объектов, переданных из стандартного ввода"
 
-#: builtin/cat-file.c:421
+#: builtin/cat-file.c:481
 msgid "show info about objects fed from the standard input"
 msgstr "показать информацию об объектах, переданных из стандартного ввода"
 
-#: builtin/cat-file.c:424
+#: builtin/cat-file.c:484
 msgid "follow in-tree symlinks (used with --batch or --batch-check)"
 msgstr "переходить по символьным ссылкам внутри дерева (используется с опциями --batch и --batch-check)"
 
+#: builtin/cat-file.c:486
+msgid "show all objects with --batch or --batch-check"
+msgstr "показать все объекты с опциями --batch или --batch-check"
+
 #: builtin/check-attr.c:11
 msgid "git check-attr [-a | --all | <attr>...] [--] <pathname>..."
 msgstr "git check-attr [-a | --all | <атрибут>…] [--] <путь>…"
@@ -3263,7 +3740,7 @@ msgstr "прочитать имена файлов из стандартного
 msgid "terminate input and output records by a NUL character"
 msgstr "окончание ввода и вывода записей по НУЛЕВОМУ символу"
 
-#: builtin/check-ignore.c:18 builtin/checkout.c:1202 builtin/gc.c:279
+#: builtin/check-ignore.c:18 builtin/checkout.c:1133 builtin/gc.c:267
 msgid "suppress progress reporting"
 msgstr "не выводить прогресс выполнения"
 
@@ -3360,113 +3837,113 @@ msgstr "добавить спереди <строку> при создании 
 msgid "copy out the files from named stage"
 msgstr "копировать файлы из указанного индекса"
 
-#: builtin/checkout.c:24
+#: builtin/checkout.c:25
 msgid "git checkout [<options>] <branch>"
 msgstr "git checkout [<опции>] <ветка>"
 
-#: builtin/checkout.c:25
+#: builtin/checkout.c:26
 msgid "git checkout [<options>] [<branch>] -- <file>..."
 msgstr "git checkout [<опции>] [<ветка>] -- <файл>…"
 
-#: builtin/checkout.c:134 builtin/checkout.c:167
+#: builtin/checkout.c:133 builtin/checkout.c:166
 #, c-format
 msgid "path '%s' does not have our version"
 msgstr "путь «%s» не имеет нашей версии"
 
-#: builtin/checkout.c:136 builtin/checkout.c:169
+#: builtin/checkout.c:135 builtin/checkout.c:168
 #, c-format
 msgid "path '%s' does not have their version"
 msgstr "путь «%s» не имеет их версии"
 
-#: builtin/checkout.c:152
+#: builtin/checkout.c:151
 #, c-format
 msgid "path '%s' does not have all necessary versions"
 msgstr "путь «%s» не имеет всех необходимых версий"
 
-#: builtin/checkout.c:196
+#: builtin/checkout.c:195
 #, c-format
 msgid "path '%s' does not have necessary versions"
 msgstr "путь «%s» не имеет необходимых версий"
 
-#: builtin/checkout.c:213
+#: builtin/checkout.c:212
 #, c-format
 msgid "path '%s': cannot merge"
 msgstr "путь «%s»: не удалось слить"
 
-#: builtin/checkout.c:230
+#: builtin/checkout.c:229
 #, c-format
 msgid "Unable to add merge result for '%s'"
 msgstr "Не удалось добавить результат слияния «%s»"
 
-#: builtin/checkout.c:251 builtin/checkout.c:254 builtin/checkout.c:257
-#: builtin/checkout.c:260
+#: builtin/checkout.c:250 builtin/checkout.c:253 builtin/checkout.c:256
+#: builtin/checkout.c:259
 #, c-format
 msgid "'%s' cannot be used with updating paths"
 msgstr "«%s» нельзя использовать при обновлении путей"
 
-#: builtin/checkout.c:263 builtin/checkout.c:266
+#: builtin/checkout.c:262 builtin/checkout.c:265
 #, c-format
 msgid "'%s' cannot be used with %s"
 msgstr "«%s» нельзя использовать одновременно с %s"
 
-#: builtin/checkout.c:269
+#: builtin/checkout.c:268
 #, c-format
 msgid "Cannot update paths and switch to branch '%s' at the same time."
 msgstr "Нельзя обновлять пути и переключаться на ветку «%s» одновременно."
 
-#: builtin/checkout.c:280 builtin/checkout.c:474
+#: builtin/checkout.c:279 builtin/checkout.c:473
 msgid "corrupt index file"
 msgstr "файл индекса поврежден"
 
-#: builtin/checkout.c:340 builtin/checkout.c:347
+#: builtin/checkout.c:339 builtin/checkout.c:346
 #, c-format
 msgid "path '%s' is unmerged"
 msgstr "путь «%s» не слит"
 
-#: builtin/checkout.c:496
+#: builtin/checkout.c:495
 msgid "you need to resolve your current index first"
 msgstr "сначала нужно разрешить конфликты в вашем текущем индексе"
 
-#: builtin/checkout.c:627
+#: builtin/checkout.c:622
 #, c-format
-msgid "Can not do reflog for '%s'\n"
-msgstr "Не удалось создать журнал ссылок для «%s»\n"
+msgid "Can not do reflog for '%s': %s\n"
+msgstr "Не удалось создать журнал ссылок для «%s»': %s\n"
 
-#: builtin/checkout.c:663
+#: builtin/checkout.c:660
 msgid "HEAD is now at"
 msgstr "HEAD сейчас на"
 
-#: builtin/checkout.c:670
+#: builtin/checkout.c:667
 #, c-format
 msgid "Reset branch '%s'\n"
 msgstr "Сброс ветки «%s»\n"
 
-#: builtin/checkout.c:673
+#: builtin/checkout.c:670
 #, c-format
 msgid "Already on '%s'\n"
 msgstr "Уже на «%s»\n"
 
-#: builtin/checkout.c:677
+#: builtin/checkout.c:674
 #, c-format
 msgid "Switched to and reset branch '%s'\n"
 msgstr "Переключение и сброс ветки «%s»\n"
 
-#: builtin/checkout.c:679 builtin/checkout.c:1134
+#: builtin/checkout.c:676 builtin/checkout.c:1065
 #, c-format
 msgid "Switched to a new branch '%s'\n"
 msgstr "Переключено на новую ветку «%s»\n"
 
-#: builtin/checkout.c:681
+#: builtin/checkout.c:678
 #, c-format
 msgid "Switched to branch '%s'\n"
 msgstr "Переключено на ветку «%s»\n"
 
-#: builtin/checkout.c:733
+#: builtin/checkout.c:730
 #, c-format
 msgid " ... and %d more.\n"
 msgstr " … и еще %d.\n"
 
-#: builtin/checkout.c:739
+#: builtin/checkout.c:736
 #, c-format
 msgid ""
 "Warning: you are leaving %d commit behind, not connected to\n"
@@ -3483,7 +3960,7 @@ msgstr[1] "Предупреждение: вы оставляете позади
 msgstr[2] "Предупреждение: вы оставляете позади %d коммитов не соединенные ни с одной из ваших веток:\n\n%s\n"
 msgstr[3] "Предупреждение: вы оставляете позади %d коммитов не соединенные ни с одной из ваших веток:\n\n%s\n"
 
-#: builtin/checkout.c:758
+#: builtin/checkout.c:755
 #, c-format
 msgid ""
 "If you want to keep it by creating a new branch, this may be a good time\n"
@@ -3502,197 +3979,192 @@ msgstr[1] "Если вы хотите сохранить их с помощью
 msgstr[2] "Если вы хотите сохранить их с помощью создания новой ветки, то сейчас самое время\nсделать это с помощью:\n\n git branch <имя-новой-ветки> %s\n\n"
 msgstr[3] "Если вы хотите сохранить их с помощью создания новой ветки, то сейчас самое время\nсделать это с помощью:\n\n git branch <имя-новой-ветки> %s\n\n"
 
-#: builtin/checkout.c:794
+#: builtin/checkout.c:791
 msgid "internal error in revision walk"
 msgstr "внутренняя ошибка при хождении по редакциям"
 
-#: builtin/checkout.c:798
+#: builtin/checkout.c:795
 msgid "Previous HEAD position was"
 msgstr "Предыдущая позиция HEAD была"
 
-#: builtin/checkout.c:825 builtin/checkout.c:1129
+#: builtin/checkout.c:822 builtin/checkout.c:1060
 msgid "You are on a branch yet to be born"
 msgstr "Вы находитесь на еще не созданной ветке"
 
-#: builtin/checkout.c:931
-#, c-format
-msgid "'%s' is already checked out at '%s'"
-msgstr "«%s» уже находится на «%s»"
-
-#: builtin/checkout.c:1036
+#: builtin/checkout.c:967
 #, c-format
 msgid "only one reference expected, %d given."
 msgstr "ожидается только одна ссылка, а передано %d."
 
-#: builtin/checkout.c:1075
+#: builtin/checkout.c:1006 builtin/worktree.c:210
 #, c-format
 msgid "invalid reference: %s"
 msgstr "неправильная ссылка: %s"
 
-#: builtin/checkout.c:1104
+#: builtin/checkout.c:1035
 #, c-format
 msgid "reference is not a tree: %s"
 msgstr "в дереве нет такой ссылки: %s"
 
-#: builtin/checkout.c:1143
+#: builtin/checkout.c:1074
 msgid "paths cannot be used with switching branches"
 msgstr "нельзя использовать пути при переключении веток"
 
-#: builtin/checkout.c:1146 builtin/checkout.c:1150
+#: builtin/checkout.c:1077 builtin/checkout.c:1081
 #, c-format
 msgid "'%s' cannot be used with switching branches"
 msgstr "нельзя использовать «%s» при переключении веток"
 
-#: builtin/checkout.c:1154 builtin/checkout.c:1157 builtin/checkout.c:1162
-#: builtin/checkout.c:1165
+#: builtin/checkout.c:1085 builtin/checkout.c:1088 builtin/checkout.c:1093
+#: builtin/checkout.c:1096
 #, c-format
 msgid "'%s' cannot be used with '%s'"
 msgstr "«%s» нельзя использовать одновременно с «%s»"
 
-#: builtin/checkout.c:1170
+#: builtin/checkout.c:1101
 #, c-format
 msgid "Cannot switch branch to a non-commit '%s'"
 msgstr "Нельзя переключить ветку на не коммит «%s»"
 
-#: builtin/checkout.c:1203 builtin/checkout.c:1205 builtin/clone.c:83
-#: builtin/remote.c:159 builtin/remote.c:161 builtin/worktree.c:282
-#: builtin/worktree.c:284
+#: builtin/checkout.c:1134 builtin/checkout.c:1136 builtin/clone.c:83
+#: builtin/remote.c:159 builtin/remote.c:161 builtin/worktree.c:317
+#: builtin/worktree.c:319
 msgid "branch"
 msgstr "ветка"
 
-#: builtin/checkout.c:1204
+#: builtin/checkout.c:1135
 msgid "create and checkout a new branch"
 msgstr "создать и перейти на новую ветку"
 
-#: builtin/checkout.c:1206
+#: builtin/checkout.c:1137
 msgid "create/reset and checkout a branch"
 msgstr "создать/сбросить и перейти на новую ветку"
 
-#: builtin/checkout.c:1207
+#: builtin/checkout.c:1138
 msgid "create reflog for new branch"
 msgstr "создать журнал ссылок для новой ветки"
 
-#: builtin/checkout.c:1208
+#: builtin/checkout.c:1139
 msgid "detach the HEAD at named commit"
 msgstr "отсоединить HEAD на указанном коммите"
 
-#: builtin/checkout.c:1209
+#: builtin/checkout.c:1140
 msgid "set upstream info for new branch"
 msgstr "установить информацию о вышестоящей ветке для новой ветки"
 
-#: builtin/checkout.c:1211
+#: builtin/checkout.c:1142
 msgid "new-branch"
 msgstr "новая-ветка"
 
-#: builtin/checkout.c:1211
+#: builtin/checkout.c:1142
 msgid "new unparented branch"
 msgstr "новая ветка без родителей"
 
-#: builtin/checkout.c:1212
+#: builtin/checkout.c:1143
 msgid "checkout our version for unmerged files"
 msgstr "перейти на нашу версию для не слитых файлов"
 
-#: builtin/checkout.c:1214
+#: builtin/checkout.c:1145
 msgid "checkout their version for unmerged files"
 msgstr "перейти на их версию для не слитых файлов"
 
-#: builtin/checkout.c:1216
+#: builtin/checkout.c:1147
 msgid "force checkout (throw away local modifications)"
 msgstr "принудительный переход (отбрасывает все локальные изменения)"
 
-#: builtin/checkout.c:1217
+#: builtin/checkout.c:1148
 msgid "perform a 3-way merge with the new branch"
 msgstr "выполнить трехходовое слияние с новой веткой"
 
-#: builtin/checkout.c:1218 builtin/merge.c:227
+#: builtin/checkout.c:1149 builtin/merge.c:227
 msgid "update ignored files (default)"
 msgstr "обновить игнорируемые файлы (по умолчанию)"
 
-#: builtin/checkout.c:1219 builtin/log.c:1239 parse-options.h:244
+#: builtin/checkout.c:1150 builtin/log.c:1264 parse-options.h:249
 msgid "style"
 msgstr "стиль"
 
-#: builtin/checkout.c:1220
+#: builtin/checkout.c:1151
 msgid "conflict style (merge or diff3)"
 msgstr "стиль конфликтов слияния (merge или diff3)"
 
-#: builtin/checkout.c:1223
+#: builtin/checkout.c:1154
 msgid "do not limit pathspecs to sparse entries only"
 msgstr "не ограничивать спецификаторы пути только частичными записями"
 
-#: builtin/checkout.c:1225
+#: builtin/checkout.c:1156
 msgid "second guess 'git checkout <no-such-branch>'"
 msgstr "пересмотр «git checkout <no-such-branch>»"
 
-#: builtin/checkout.c:1227
+#: builtin/checkout.c:1158
 msgid "do not check if another worktree is holding the given ref"
 msgstr "не проверять, что другое дерево уже содержит указанную ссылку"
 
-#: builtin/checkout.c:1252
+#: builtin/checkout.c:1181
 msgid "-b, -B and --orphan are mutually exclusive"
 msgstr "-b, -B и --orphan нельзя использовать одновременно"
 
-#: builtin/checkout.c:1269
+#: builtin/checkout.c:1198
 msgid "--track needs a branch name"
 msgstr "--track требует имя ветки"
 
-#: builtin/checkout.c:1274
+#: builtin/checkout.c:1203
 msgid "Missing branch name; try -b"
 msgstr "Пропущено имя ветки; попробуйте -b"
 
-#: builtin/checkout.c:1310
+#: builtin/checkout.c:1239
 msgid "invalid path specification"
 msgstr "неправильная спецификация пути"
 
-#: builtin/checkout.c:1317
+#: builtin/checkout.c:1246
 #, c-format
 msgid ""
 "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 "Нельзя обновить пути и одновременно переключить на ветку «%s».\nВы хотели переключиться на «%s», что не может быть определено как коммит?"
 
-#: builtin/checkout.c:1322
+#: builtin/checkout.c:1251
 #, c-format
 msgid "git checkout: --detach does not take a path argument '%s'"
 msgstr "git checkout: --detach не принимает путь «%s» как аргумент"
 
-#: builtin/checkout.c:1326
+#: builtin/checkout.c:1255
 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/clean.c:26
+#: builtin/clean.c:25
 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:30
+#: builtin/clean.c:29
 #, c-format
 msgid "Removing %s\n"
 msgstr "Удаление %s\n"
 
-#: builtin/clean.c:31
+#: builtin/clean.c:30
 #, c-format
 msgid "Would remove %s\n"
 msgstr "Будет удалено %s\n"
 
-#: builtin/clean.c:32
+#: builtin/clean.c:31
 #, c-format
 msgid "Skipping repository %s\n"
 msgstr "Пропуск репозитория %s\n"
 
-#: builtin/clean.c:33
+#: builtin/clean.c:32
 #, c-format
 msgid "Would skip repository %s\n"
 msgstr "Будет пропущен репозиторий %s\n"
 
-#: builtin/clean.c:34
+#: builtin/clean.c:33
 #, c-format
 msgid "failed to remove %s"
 msgstr "сбой удаления %s"
 
-#: builtin/clean.c:295
+#: builtin/clean.c:317
 msgid ""
 "Prompt help:\n"
 "1          - select a numbered item\n"
@@ -3700,7 +4172,7 @@ msgid ""
 "           - (empty) select nothing"
 msgstr "Справка по выделению:\n1          - выбрать указанный элемент\nfoo        - выбрать элемент с указанным префиксом\n           - (пусто) не выбирать ничего"
 
-#: builtin/clean.c:299
+#: builtin/clean.c:321
 msgid ""
 "Prompt help:\n"
 "1          - select a single item\n"
@@ -3712,36 +4184,36 @@ msgid ""
 "           - (empty) finish selecting"
 msgstr "Справка по выделению:\n1          - выбрать один элемент\n3-5        - выбрать диапазон элементов\n2-3,6-9    - выбрать несколько диапазонов\nfoo        - выбрать элемент с указанным префиксом\n-…       - убрать выделение с указанных элементов\n*          - выбрать все элементы\n           - (пусто) завершить выделение"
 
-#: builtin/clean.c:515
+#: builtin/clean.c:537
 #, c-format
 msgid "Huh (%s)?"
 msgstr "Хм (%s)?"
 
-#: builtin/clean.c:657
+#: builtin/clean.c:679
 #, c-format
 msgid "Input ignore patterns>> "
 msgstr "Шаблоны игнорирования ввода>> "
 
-#: builtin/clean.c:694
+#: builtin/clean.c:716
 #, c-format
 msgid "WARNING: Cannot find items matched by: %s"
 msgstr "ПРЕДУПРЕЖДЕНИЕ: Не удалось найти элементы соответствующие: %s"
 
-#: builtin/clean.c:715
+#: builtin/clean.c:737
 msgid "Select items to delete"
 msgstr "Укажите элементы для удаления"
 
 #. TRANSLATORS: Make sure to keep [y/N] as is
-#: builtin/clean.c:756
+#: builtin/clean.c:778
 #, c-format
 msgid "Remove %s [y/N]? "
 msgstr "Удалить %s [y - да/N - нет]? "
 
-#: builtin/clean.c:781
+#: builtin/clean.c:803
 msgid "Bye."
 msgstr "До свидания."
 
-#: builtin/clean.c:789
+#: builtin/clean.c:811
 msgid ""
 "clean               - start cleaning\n"
 "filter by pattern   - exclude items from deletion\n"
@@ -3752,15 +4224,15 @@ msgid ""
 "?                   - help for prompt selection"
 msgstr "clean               - начать очистку\nfilter by pattern   - исключить удаление элементов\nselect by numbers   - исключить удаление элементов по номерам\nask each            - запрашивать подтверждение на удаление каждого элемента (как «rm -i»)\nquit                - прекратить очистку\nhelp                - этот экран\n?                   - справка по выделению"
 
-#: builtin/clean.c:816
+#: builtin/clean.c:838
 msgid "*** Commands ***"
 msgstr "*** Команды ***"
 
-#: builtin/clean.c:817
+#: builtin/clean.c:839
 msgid "What now"
 msgstr "Что теперь"
 
-#: builtin/clean.c:825
+#: builtin/clean.c:847
 msgid "Would remove the following item:"
 msgid_plural "Would remove the following items:"
 msgstr[0] "Удалить следующие элементы:"
@@ -3768,54 +4240,54 @@ msgstr[1] "Удалить следующие элементы:"
 msgstr[2] "Удалить следующие элементы:"
 msgstr[3] "Удалить следующие элементы:"
 
-#: builtin/clean.c:842
+#: builtin/clean.c:864
 msgid "No more files to clean, exiting."
 msgstr "Больше нет файлов для очистки, выходим."
 
-#: builtin/clean.c:873
+#: builtin/clean.c:895
 msgid "do not print names of files removed"
 msgstr "не выводить имена удаляемых файлов"
 
-#: builtin/clean.c:875
+#: builtin/clean.c:897
 msgid "force"
 msgstr "принудительно"
 
-#: builtin/clean.c:876
+#: builtin/clean.c:898
 msgid "interactive cleaning"
 msgstr "интерактивная очистка"
 
-#: builtin/clean.c:878
+#: builtin/clean.c:900
 msgid "remove whole directories"
 msgstr "удалить каталоги полностью"
 
-#: builtin/clean.c:879 builtin/describe.c:407 builtin/grep.c:714
+#: builtin/clean.c:901 builtin/describe.c:407 builtin/grep.c:714
 #: builtin/ls-files.c:443 builtin/name-rev.c:311 builtin/show-ref.c:187
 msgid "pattern"
 msgstr "шаблон"
 
-#: builtin/clean.c:880
+#: builtin/clean.c:902
 msgid "add <pattern> to ignore rules"
 msgstr "добавить <шаблон> в правила игнорирования"
 
-#: builtin/clean.c:881
+#: builtin/clean.c:903
 msgid "remove ignored files, too"
 msgstr "также удалить игнорируемые файлы"
 
-#: builtin/clean.c:883
+#: builtin/clean.c:905
 msgid "remove only ignored files"
 msgstr "удалить только игнорируемые файлы"
 
-#: builtin/clean.c:901
+#: builtin/clean.c:923
 msgid "-x and -X cannot be used together"
 msgstr "нельзя использовать одновременно -x и -X"
 
-#: builtin/clean.c:905
+#: builtin/clean.c:927
 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:908
+#: builtin/clean.c:930
 msgid ""
 "clean.requireForce defaults to true and neither -i, -n, nor -f given; "
 "refusing to clean"
@@ -3825,8 +4297,8 @@ msgstr "clean.requireForce установлен по умолчанию как t
 msgid "git clone [<options>] [--] <repo> [<dir>]"
 msgstr "git clone [<опции>] [--] <репозиторий> [<каталог>]"
 
-#: builtin/clone.c:57 builtin/fetch.c:111 builtin/merge.c:224
-#: builtin/push.c:523
+#: builtin/clone.c:57 builtin/fetch.c:112 builtin/merge.c:224
+#: builtin/pull.c:109 builtin/push.c:560 builtin/send-pack.c:168
 msgid "force progress reporting"
 msgstr "принудительно выводить прогресс"
 
@@ -3834,7 +4306,7 @@ msgstr "принудительно выводить прогресс"
 msgid "don't create a checkout"
 msgstr "не переключать рабочую копию на HEAD"
 
-#: builtin/clone.c:60 builtin/clone.c:62 builtin/init-db.c:503
+#: builtin/clone.c:60 builtin/clone.c:62 builtin/init-db.c:504
 msgid "create a bare repository"
 msgstr "создать голый репозиторий"
 
@@ -3858,11 +4330,11 @@ msgstr "настроить как общедоступный репозитор
 msgid "initialize submodules in the clone"
 msgstr "инициализировать подмодули в клоне"
 
-#: builtin/clone.c:75 builtin/init-db.c:500
+#: builtin/clone.c:75 builtin/init-db.c:501
 msgid "template-directory"
 msgstr "каталог-шаблонов"
 
-#: builtin/clone.c:76 builtin/init-db.c:501
+#: builtin/clone.c:76 builtin/init-db.c:502
 msgid "directory from which templates will be used"
 msgstr "каталог, шаблоны из которого будут использованы"
 
@@ -3890,7 +4362,8 @@ msgstr "перейти на <ветку>, вместо HEAD внешнего р
 msgid "path to git-upload-pack on the remote"
 msgstr "путь к git-upload-pack на внешнем репозитории"
 
-#: builtin/clone.c:87 builtin/fetch.c:112 builtin/grep.c:659
+#: builtin/clone.c:87 builtin/fetch.c:113 builtin/grep.c:659
+#: builtin/pull.c:186
 msgid "depth"
 msgstr "глубина"
 
@@ -3902,11 +4375,11 @@ msgstr "сделать частичный клон указанной глуби
 msgid "clone only one branch, HEAD or --branch"
 msgstr "клонировать только одну ветку, HEAD или --branch"
 
-#: builtin/clone.c:91 builtin/init-db.c:509
+#: builtin/clone.c:91 builtin/init-db.c:510
 msgid "gitdir"
 msgstr "каталог-git"
 
-#: builtin/clone.c:92 builtin/init-db.c:510
+#: builtin/clone.c:92 builtin/init-db.c:511
 msgid "separate git dir from working tree"
 msgstr "разместить каталог git отдельно от рабочей копии"
 
@@ -3918,178 +4391,173 @@ msgstr "ключ=значение"
 msgid "set config inside the new repository"
 msgstr "установить параметры внутри нового репозитория"
 
-#: builtin/clone.c:240
+#: builtin/clone.c:298
 #, c-format
 msgid "reference repository '%s' is not a local repository."
 msgstr "ссылаемый репозиторий «%s» не является локальным."
 
-#: builtin/clone.c:244
+#: builtin/clone.c:302
 #, c-format
 msgid "reference repository '%s' is shallow"
 msgstr "ссылаемый репозиторий «%s» является частичным"
 
-#: builtin/clone.c:247
+#: builtin/clone.c:305
 #, c-format
 msgid "reference repository '%s' is grafted"
 msgstr "ссылаемый репозиторий «%s» является сращенным"
 
-#: builtin/clone.c:310
-#, c-format
-msgid "failed to create directory '%s'"
-msgstr "не удалось создать каталог «%s»"
-
-#: builtin/clone.c:312 builtin/diff.c:84
+#: builtin/clone.c:370 builtin/diff.c:84
 #, c-format
 msgid "failed to stat '%s'"
 msgstr "не удалось выполнить stat «%s»"
 
-#: builtin/clone.c:314
+#: builtin/clone.c:372
 #, c-format
 msgid "%s exists and is not a directory"
 msgstr "%s уже существует и не является каталогом"
 
-#: builtin/clone.c:328
+#: builtin/clone.c:386
 #, c-format
 msgid "failed to stat %s\n"
 msgstr "не удалось выполнить stat %s\n"
 
-#: builtin/clone.c:350
+#: builtin/clone.c:408
 #, c-format
 msgid "failed to create link '%s'"
 msgstr "не удалось создать ссылку «%s»"
 
-#: builtin/clone.c:354
+#: builtin/clone.c:412
 #, c-format
 msgid "failed to copy file to '%s'"
 msgstr "не удалось копировать файл в «%s»"
 
-#: builtin/clone.c:377 builtin/clone.c:551
+#: builtin/clone.c:435 builtin/clone.c:619
 #, c-format
 msgid "done.\n"
 msgstr "готово.\n"
 
-#: builtin/clone.c:389
+#: builtin/clone.c:447
 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» вы можете просмотреть, какие файлы были обновлены, а повторить попытку перехода на версию с помощью «git checkout -f HEAD»\n"
 
-#: builtin/clone.c:466
+#: builtin/clone.c:524
 #, c-format
 msgid "Could not find remote branch %s to clone."
 msgstr "Не удалось найти внешнюю ветку %s для клонирования."
 
-#: builtin/clone.c:546
+#: builtin/clone.c:614
 #, c-format
 msgid "Checking connectivity... "
 msgstr "Проверка соединения… "
 
-#: builtin/clone.c:549
+#: builtin/clone.c:617
 msgid "remote did not send all necessary objects"
 msgstr "внешний репозиторий прислал не все необходимые объекты"
 
-#: builtin/clone.c:613
+#: builtin/clone.c:681
 msgid "remote HEAD refers to nonexistent ref, unable to checkout.\n"
 msgstr "внешний HEAD ссылается на несуществующую ссылку, нельзя перейти на такую версию.\n"
 
-#: builtin/clone.c:644
+#: builtin/clone.c:712
 msgid "unable to checkout working tree"
 msgstr "не удалось перейти на версию в рабочем каталоге"
 
-#: builtin/clone.c:731
+#: builtin/clone.c:799
 msgid "cannot repack to clean up"
 msgstr "не удалось выполнить перепаковку для очистки"
 
-#: builtin/clone.c:733
+#: builtin/clone.c:801
 msgid "cannot unlink temporary alternates file"
 msgstr "не удалось отсоединить временные альтернативные файлы"
 
-#: builtin/clone.c:763
+#: builtin/clone.c:831
 msgid "Too many arguments."
 msgstr "Слишком много аргументов."
 
-#: builtin/clone.c:767
+#: builtin/clone.c:835
 msgid "You must specify a repository to clone."
 msgstr "Вы должны указать репозиторий для клонирования."
 
-#: builtin/clone.c:778
+#: builtin/clone.c:846
 #, c-format
 msgid "--bare and --origin %s options are incompatible."
 msgstr "--bare и --origin %s нельзя использовать одновременно."
 
-#: builtin/clone.c:781
+#: builtin/clone.c:849
 msgid "--bare and --separate-git-dir are incompatible."
 msgstr "--bare и --separate-git-dir нельзя использовать одновременно."
 
-#: builtin/clone.c:794
+#: builtin/clone.c:862
 #, c-format
 msgid "repository '%s' does not exist"
 msgstr "репозиторий «%s» не существует"
 
-#: builtin/clone.c:800 builtin/fetch.c:1160
+#: builtin/clone.c:868 builtin/fetch.c:1168
 #, c-format
 msgid "depth %s is not a positive number"
 msgstr "глубина %s не является положительным числом"
 
-#: builtin/clone.c:810
+#: builtin/clone.c:878
 #, c-format
 msgid "destination path '%s' already exists and is not an empty directory."
 msgstr "целевой путь «%s» уже существует и не является пустым каталогом."
 
-#: builtin/clone.c:820
+#: builtin/clone.c:888
 #, c-format
 msgid "working tree '%s' already exists."
 msgstr "рабочий каталог «%s» уже существует."
 
-#: builtin/clone.c:835 builtin/clone.c:846 builtin/worktree.c:193
-#: builtin/worktree.c:220
+#: builtin/clone.c:903 builtin/clone.c:914 builtin/worktree.c:218
+#: builtin/worktree.c:245
 #, c-format
 msgid "could not create leading directories of '%s'"
 msgstr "не удалось создать родительские каталоги для «%s»"
 
-#: builtin/clone.c:838
+#: builtin/clone.c:906
 #, c-format
 msgid "could not create work tree dir '%s'"
 msgstr "не удалось создать рабочий каталог «%s»"
 
-#: builtin/clone.c:856
+#: builtin/clone.c:924
 #, c-format
 msgid "Cloning into bare repository '%s'...\n"
 msgstr "Клонирование в голый репозиторий «%s»…\n"
 
-#: builtin/clone.c:858
+#: builtin/clone.c:926
 #, c-format
 msgid "Cloning into '%s'...\n"
 msgstr "Клонирование в «%s»…\n"
 
-#: builtin/clone.c:883
+#: builtin/clone.c:951
 msgid "--dissociate given, but there is no --reference"
 msgstr "передана опция --dissociate, но не передана --reference"
 
-#: builtin/clone.c:900
+#: builtin/clone.c:968
 msgid "--depth is ignored in local clones; use file:// instead."
 msgstr "--depth игнорируется на локальных клонах; вместо этого используйте file://."
 
-#: builtin/clone.c:903
+#: builtin/clone.c:971
 msgid "source repository is shallow, ignoring --local"
 msgstr "исходный репозиторий является частичным, --local игнорируется"
 
-#: builtin/clone.c:908
+#: builtin/clone.c:976
 msgid "--local is ignored"
 msgstr "--local игнорируется"
 
-#: builtin/clone.c:912
+#: builtin/clone.c:980
 #, c-format
 msgid "Don't know how to clone %s"
 msgstr "Не знаю как клонировать %s"
 
-#: builtin/clone.c:961 builtin/clone.c:969
+#: builtin/clone.c:1029 builtin/clone.c:1037
 #, c-format
 msgid "Remote branch %s not found in upstream %s"
 msgstr "Внешняя ветка %s не найдена в вышестоящем репозитории %s"
 
-#: builtin/clone.c:972
+#: builtin/clone.c:1040
 msgid "You appear to have cloned an empty repository."
 msgstr "Похоже, что вы клонировали пустой репозиторий."
 
@@ -4196,108 +4664,99 @@ msgstr "Если вы хотите пропустит этот коммит, и
 msgid "failed to unpack HEAD tree object"
 msgstr "сбой распаковки объекта дерева HEAD"
 
-#: builtin/commit.c:344
+#: builtin/commit.c:345
 msgid "unable to create temporary index"
 msgstr "не удалось создать временный индекс"
 
-#: builtin/commit.c:350
+#: builtin/commit.c:351
 msgid "interactive add failed"
 msgstr "сбой интерактивного добавления"
 
-#: builtin/commit.c:361
-msgid "unable to write index file"
-msgstr "не удалось записать индекс"
-
-#: builtin/commit.c:363
+#: builtin/commit.c:364
 msgid "unable to update temporary index"
 msgstr "не удалось обновить временный индекс"
 
-#: builtin/commit.c:365
+#: builtin/commit.c:366
 msgid "Failed to update main cache tree"
 msgstr "Сбой при обновлении основного кэша дерева"
 
-#: builtin/commit.c:389 builtin/commit.c:414 builtin/commit.c:463
+#: builtin/commit.c:390 builtin/commit.c:413 builtin/commit.c:462
 msgid "unable to write new_index file"
 msgstr "не удалось записать файл new_index"
 
-#: builtin/commit.c:445
+#: builtin/commit.c:444
 msgid "cannot do a partial commit during a merge."
 msgstr "нельзя создать частичный коммит во время слияния."
 
-#: builtin/commit.c:447
+#: builtin/commit.c:446
 msgid "cannot do a partial commit during a cherry-pick."
 msgstr "нельзя создать частичный коммит во время отбора лучшего коммита."
 
-#: builtin/commit.c:456
+#: builtin/commit.c:455
 msgid "cannot read the index"
 msgstr "не удалось прочитать индекс"
 
-#: builtin/commit.c:475
+#: builtin/commit.c:474
 msgid "unable to write temporary index file"
 msgstr "не удалось записать временный файл индекса"
 
-#: builtin/commit.c:580
+#: builtin/commit.c:579
 #, c-format
 msgid "commit '%s' lacks author header"
 msgstr "у коммита «%s» отсутствует автор в заголовке"
 
-#: builtin/commit.c:582
+#: builtin/commit.c:581
 #, c-format
 msgid "commit '%s' has malformed author line"
 msgstr "у коммита «%s» автор в неверном формате"
 
-#: builtin/commit.c:601
+#: builtin/commit.c:600
 msgid "malformed --author parameter"
 msgstr "параметр --author в неверном формате"
 
-#: builtin/commit.c:609
+#: builtin/commit.c:608
 #, c-format
 msgid "invalid date format: %s"
 msgstr "неправильный формат даты: %s"
 
-#: builtin/commit.c:653
+#: builtin/commit.c:652
 msgid ""
 "unable to select a comment character that is not used\n"
 "in the current commit message"
 msgstr "нельзя выбрать символ комментария, который\nне используется в текущем сообщении коммита"
 
-#: builtin/commit.c:690 builtin/commit.c:723 builtin/commit.c:1080
+#: builtin/commit.c:689 builtin/commit.c:722 builtin/commit.c:1079
 #, c-format
 msgid "could not lookup commit %s"
 msgstr "не удалось запросить коммит %s"
 
-#: builtin/commit.c:702 builtin/shortlog.c:273
+#: builtin/commit.c:701 builtin/shortlog.c:273
 #, c-format
 msgid "(reading log message from standard input)\n"
 msgstr "(чтение файла журнала из стандартного ввода)\n"
 
-#: builtin/commit.c:704
+#: builtin/commit.c:703
 msgid "could not read log from standard input"
 msgstr "не удалось прочитать файл журнала из стандартного ввода"
 
-#: builtin/commit.c:708
+#: builtin/commit.c:707
 #, c-format
 msgid "could not read log file '%s'"
 msgstr "не удалось прочитать файл журнала «%s»"
 
-#: builtin/commit.c:730
+#: builtin/commit.c:729
 msgid "could not read MERGE_MSG"
 msgstr "не удалось прочитать MERGE_MSG"
 
-#: builtin/commit.c:734
+#: builtin/commit.c:733
 msgid "could not read SQUASH_MSG"
 msgstr "не удалось прочитать SQUASH_MSG"
 
-#: builtin/commit.c:738 builtin/merge.c:1079
-#, c-format
-msgid "could not read '%s'"
-msgstr "не удалось прочитать «%s»"
-
-#: builtin/commit.c:785
+#: builtin/commit.c:784
 msgid "could not write commit template"
 msgstr "не удалось записать шаблон описания коммита"
 
-#: builtin/commit.c:803
+#: builtin/commit.c:802
 #, c-format
 msgid ""
 "\n"
@@ -4307,7 +4766,7 @@ msgid ""
 "and try again.\n"
 msgstr "\nПохоже, что вы пытаетесь закоммитить слияние.\nЕсли это ошибка, пожалуйста удалите файл\n\t%s\nи попробуйте снова.\n"
 
-#: builtin/commit.c:808
+#: builtin/commit.c:807
 #, c-format
 msgid ""
 "\n"
@@ -4317,14 +4776,14 @@ msgid ""
 "and try again.\n"
 msgstr "\nПохоже, что вы пытаетесь закоммитить отбор лучшего.\nЕсли это ошибка, пожалуйста удалите файл\n\t%s\nи попробуйте снова.\n"
 
-#: builtin/commit.c:821
+#: builtin/commit.c:820
 #, 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:828
+#: builtin/commit.c:827
 #, c-format
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
@@ -4332,348 +4791,335 @@ msgid ""
 "An empty message aborts the commit.\n"
 msgstr "Пожалуйста, введите сообщение коммита для ваших изменений. Строки,\nначинающиеся с «%c» будут оставлены; вы можете удалить их вручную,\nесли хотите. Пустое сообщение отменяет процесс коммита.\n"
 
-#: builtin/commit.c:848
+#: builtin/commit.c:847
 #, c-format
 msgid "%sAuthor:    %.*s <%.*s>"
 msgstr "%sАвтор:     %.*s <%.*s>"
 
-#: builtin/commit.c:856
+#: builtin/commit.c:855
 #, c-format
 msgid "%sDate:      %s"
 msgstr "%sДата:      %s"
 
-#: builtin/commit.c:863
+#: builtin/commit.c:862
 #, c-format
 msgid "%sCommitter: %.*s <%.*s>"
 msgstr "%sКоммитер:  %.*s <%.*s>"
 
-#: builtin/commit.c:881
+#: builtin/commit.c:880
 msgid "Cannot read index"
 msgstr "Не удалось прочитать индекс"
 
-#: builtin/commit.c:938
+#: builtin/commit.c:937
 msgid "Error building trees"
 msgstr "Ошибка при построении деревьев"
 
-#: builtin/commit.c:953 builtin/tag.c:495
+#: builtin/commit.c:952 builtin/tag.c:495
 #, 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:1054
 #, c-format
 msgid "--author '%s' is not 'Name <email>' and matches no existing author"
 msgstr "--author «%s» не в формате «Имя <почта>» и не совпадает с существующим автором"
 
-#: builtin/commit.c:1070 builtin/commit.c:1310
+#: builtin/commit.c:1069 builtin/commit.c:1309
 #, c-format
 msgid "Invalid untracked files mode '%s'"
 msgstr "Неправильный режим неотслеживаемых файлов «%s»"
 
-#: builtin/commit.c:1107
+#: builtin/commit.c:1106
 msgid "--long and -z are incompatible"
 msgstr "--long и -z нельзя использовать одновременно"
 
-#: builtin/commit.c:1137
+#: builtin/commit.c:1136
 msgid "Using both --reset-author and --author does not make sense"
 msgstr "Указание одновременно опций --reset-author и --author не имеет смысла"
 
-#: builtin/commit.c:1146
+#: builtin/commit.c:1145
 msgid "You have nothing to amend."
 msgstr "Нечего исправлять."
 
-#: builtin/commit.c:1149
+#: builtin/commit.c:1148
 msgid "You are in the middle of a merge -- cannot amend."
 msgstr "Вы в процессе слияния —  сейчас нельзя исправлять."
 
-#: builtin/commit.c:1151
+#: builtin/commit.c:1150
 msgid "You are in the middle of a cherry-pick -- cannot amend."
 msgstr "Вы в процессе отбора лучшего —  сейчас нельзя исправлять."
 
-#: builtin/commit.c:1154
+#: builtin/commit.c:1153
 msgid "Options --squash and --fixup cannot be used together"
 msgstr "Опции --squash и --fixup не могут использоваться одновременно"
 
-#: builtin/commit.c:1164
+#: builtin/commit.c:1163
 msgid "Only one of -c/-C/-F/--fixup can be used."
 msgstr "Может использоваться только одна из опций -c/-C/-F/--fixup."
 
-#: builtin/commit.c:1166
+#: builtin/commit.c:1165
 msgid "Option -m cannot be combined with -c/-C/-F/--fixup."
 msgstr "Опция -m не может использоваться с -c/-C/-F/--fixup."
 
-#: builtin/commit.c:1174
+#: builtin/commit.c:1173
 msgid "--reset-author can be used only with -C, -c or --amend."
 msgstr "--reset-author может использоваться только одновременно с опциями -C, -c или --amend."
 
-#: builtin/commit.c:1191
+#: builtin/commit.c:1190
 msgid "Only one of --include/--only/--all/--interactive/--patch can be used."
 msgstr "Может использоваться только одна из опций --include/--only/--all/--interactive/--patch."
 
-#: builtin/commit.c:1193
+#: builtin/commit.c:1192
 msgid "No paths with --include/--only does not make sense."
 msgstr "Указание путей каталогов с опциями --include/--only не имеет смысла."
 
-#: builtin/commit.c:1195
+#: builtin/commit.c:1194
 msgid "Clever... amending the last one with dirty index."
 msgstr "Умно… отмена последнего с измененным индексом."
 
-#: builtin/commit.c:1197
+#: builtin/commit.c:1196
 msgid "Explicit paths specified without -i or -o; assuming --only paths..."
 msgstr "Пути явно указаны пути без опций -i или -o; предполагаю опцию --only…"
 
-#: builtin/commit.c:1209 builtin/tag.c:728
+#: builtin/commit.c:1208 builtin/tag.c:730
 #, c-format
 msgid "Invalid cleanup mode %s"
 msgstr "Неправильное значение режима очистки %s"
 
-#: builtin/commit.c:1214
+#: builtin/commit.c:1213
 msgid "Paths with -a does not make sense."
 msgstr "С опцией -a указание пути не имеет смысла."
 
-#: builtin/commit.c:1324 builtin/commit.c:1603
+#: builtin/commit.c:1323 builtin/commit.c:1602
 msgid "show status concisely"
 msgstr "кратко показать статус"
 
-#: builtin/commit.c:1326 builtin/commit.c:1605
+#: builtin/commit.c:1325 builtin/commit.c:1604
 msgid "show branch information"
 msgstr "показать информацию о версии"
 
-#: builtin/commit.c:1328 builtin/commit.c:1607 builtin/push.c:509
+#: builtin/commit.c:1327 builtin/commit.c:1606 builtin/push.c:546
 msgid "machine-readable output"
 msgstr "машиночитаемый вывод"
 
-#: builtin/commit.c:1331 builtin/commit.c:1609
+#: builtin/commit.c:1330 builtin/commit.c:1608
 msgid "show status in long format (default)"
 msgstr "показать статус в длинном формате (по умолчанию)"
 
-#: builtin/commit.c:1334 builtin/commit.c:1612
+#: builtin/commit.c:1333 builtin/commit.c:1611
 msgid "terminate entries with NUL"
 msgstr "завершать записи НУЛЕВЫМ байтом"
 
-#: builtin/commit.c:1336 builtin/commit.c:1615 builtin/fast-export.c:980
-#: builtin/fast-export.c:983 builtin/tag.c:603
+#: builtin/commit.c:1335 builtin/commit.c:1614 builtin/fast-export.c:981
+#: builtin/fast-export.c:984 builtin/tag.c:604
 msgid "mode"
 msgstr "режим"
 
-#: builtin/commit.c:1337 builtin/commit.c:1615
+#: builtin/commit.c:1336 builtin/commit.c:1614
 msgid "show untracked files, optional modes: all, normal, no. (Default: all)"
 msgstr "показать неотслеживаемые файлы, опциональные режимы: all (все), normal (как обычно), no (нет). (По умолчанию: all)"
 
-#: builtin/commit.c:1340
+#: builtin/commit.c:1339
 msgid "show ignored files"
 msgstr "показать игнорируемые файлы"
 
-#: builtin/commit.c:1341 parse-options.h:152
+#: builtin/commit.c:1340 parse-options.h:155
 msgid "when"
 msgstr "когда"
 
-#: builtin/commit.c:1342
+#: builtin/commit.c:1341
 msgid ""
 "ignore changes to submodules, optional when: all, dirty, untracked. "
 "(Default: all)"
 msgstr "игнорировать изменения в подмодулях, опционально когда: all (всегда), dirty (измененные), untracked (неотслеживаемые). (По умолчанию: all)"
 
-#: builtin/commit.c:1344
+#: builtin/commit.c:1343
 msgid "list untracked files in columns"
 msgstr "показать неотслеживаемые файлы по столбцам"
 
-#: builtin/commit.c:1430
+#: builtin/commit.c:1429
 msgid "couldn't look up newly created commit"
 msgstr "нельзя запросить новосозданный коммит"
 
-#: builtin/commit.c:1432
+#: builtin/commit.c:1431
 msgid "could not parse newly created commit"
 msgstr "нельзя разобрать новосозданный коммит"
 
-#: builtin/commit.c:1477
+#: builtin/commit.c:1476
 msgid "detached HEAD"
 msgstr "отделенный HEAD"
 
-#: builtin/commit.c:1480
+#: builtin/commit.c:1479
 msgid " (root-commit)"
 msgstr " (корневой коммит)"
 
-#: builtin/commit.c:1573
+#: builtin/commit.c:1572
 msgid "suppress summary after successful commit"
 msgstr "не выводить сводку после успешного коммита"
 
-#: builtin/commit.c:1574
+#: builtin/commit.c:1573
 msgid "show diff in commit message template"
 msgstr "добавить список изменений в шаблон сообщения коммита"
 
-#: builtin/commit.c:1576
+#: builtin/commit.c:1575
 msgid "Commit message options"
 msgstr "Опции сообщения коммита"
 
-#: builtin/commit.c:1577 builtin/tag.c:601
+#: builtin/commit.c:1576 builtin/tag.c:602
 msgid "read message from file"
 msgstr "прочитать сообщение из файла"
 
-#: builtin/commit.c:1578
+#: builtin/commit.c:1577
 msgid "author"
 msgstr "автор"
 
-#: builtin/commit.c:1578
+#: builtin/commit.c:1577
 msgid "override author for commit"
 msgstr "подменить автора коммита"
 
-#: builtin/commit.c:1579 builtin/gc.c:280
+#: builtin/commit.c:1578 builtin/gc.c:268
 msgid "date"
 msgstr "дата"
 
-#: builtin/commit.c:1579
+#: builtin/commit.c:1578
 msgid "override date for commit"
 msgstr "подменить дату коммита"
 
-#: builtin/commit.c:1580 builtin/merge.c:218 builtin/notes.c:391
-#: builtin/notes.c:554 builtin/tag.c:599
+#: builtin/commit.c:1579 builtin/merge.c:218 builtin/notes.c:392
+#: builtin/notes.c:555 builtin/tag.c:600
 msgid "message"
 msgstr "сообщение"
 
-#: builtin/commit.c:1580
+#: builtin/commit.c:1579
 msgid "commit message"
 msgstr "сообщение коммита"
 
-#: builtin/commit.c:1581
+#: builtin/commit.c:1580
 msgid "reuse and edit message from specified commit"
 msgstr "использовать и отредактировать сообщение от указанного коммита"
 
-#: builtin/commit.c:1582
+#: builtin/commit.c:1581
 msgid "reuse message from specified commit"
 msgstr "использовать сообщение указанного коммита"
 
-#: builtin/commit.c:1583
+#: builtin/commit.c:1582
 msgid "use autosquash formatted message to fixup specified commit"
 msgstr "использовать форматированное сообщение автоуплотнения для исправления указанного коммита"
 
-#: builtin/commit.c:1584
+#: builtin/commit.c:1583
 msgid "use autosquash formatted message to squash specified commit"
 msgstr "использовать форматированное сообщение автоуплотнения для уплотнения указанного коммита"
 
-#: builtin/commit.c:1585
+#: builtin/commit.c:1584
 msgid "the commit is authored by me now (used with -C/-c/--amend)"
 msgstr "коммит теперь за моим авторством (с использованием -C/-c/--amend)"
 
-#: builtin/commit.c:1586 builtin/log.c:1191 builtin/revert.c:86
+#: builtin/commit.c:1585 builtin/log.c:1216 builtin/revert.c:86
 msgid "add Signed-off-by:"
 msgstr "добавить Signed-off-by:"
 
-#: builtin/commit.c:1587
+#: builtin/commit.c:1586
 msgid "use specified template file"
 msgstr "использовать указанный файл шаблона"
 
-#: builtin/commit.c:1588
+#: builtin/commit.c:1587
 msgid "force edit of commit"
 msgstr "принудительно редактировать коммит"
 
-#: builtin/commit.c:1589
+#: builtin/commit.c:1588
 msgid "default"
 msgstr "по-умолчанию"
 
-#: builtin/commit.c:1589 builtin/tag.c:604
+#: builtin/commit.c:1588 builtin/tag.c:605
 msgid "how to strip spaces and #comments from message"
 msgstr "как удалять пробелы и #комментарии из сообщения коммита"
 
-#: builtin/commit.c:1590
+#: builtin/commit.c:1589
 msgid "include status in commit message template"
 msgstr "включить статус файлов в шаблон сообщения коммита"
 
-#: builtin/commit.c:1591 builtin/merge.c:225 builtin/revert.c:92
-#: builtin/tag.c:605
-msgid "key-id"
-msgstr "key-id"
-
-#: builtin/commit.c:1592 builtin/merge.c:226 builtin/revert.c:93
+#: builtin/commit.c:1591 builtin/merge.c:226 builtin/pull.c:156
+#: builtin/revert.c:93
 msgid "GPG sign commit"
 msgstr "подписать коммит с помощью GPG"
 
-#: builtin/commit.c:1595
+#: builtin/commit.c:1594
 msgid "Commit contents options"
 msgstr "Опции содержимого коммита"
 
-#: builtin/commit.c:1596
+#: builtin/commit.c:1595
 msgid "commit all changed files"
 msgstr "закоммитить все измененные файлы"
 
-#: builtin/commit.c:1597
+#: builtin/commit.c:1596
 msgid "add specified files to index for commit"
 msgstr "добавить указанные файлы в индекс для коммита"
 
-#: builtin/commit.c:1598
+#: builtin/commit.c:1597
 msgid "interactively add files"
 msgstr "интерактивное добавление файлов"
 
-#: builtin/commit.c:1599
+#: builtin/commit.c:1598
 msgid "interactively add changes"
 msgstr "интерактивное добавление изменений"
 
-#: builtin/commit.c:1600
+#: builtin/commit.c:1599
 msgid "commit only specified files"
 msgstr "закоммитить только указанные файлы"
 
-#: builtin/commit.c:1601
+#: builtin/commit.c:1600
 msgid "bypass pre-commit hook"
 msgstr "пропустить перехватчик перед-коммитом"
 
-#: builtin/commit.c:1602
+#: builtin/commit.c:1601
 msgid "show what would be committed"
 msgstr "показать, что будет закоммичено"
 
-#: builtin/commit.c:1613
+#: builtin/commit.c:1612
 msgid "amend previous commit"
 msgstr "исправить предыдущий коммит"
 
-#: builtin/commit.c:1614
+#: builtin/commit.c:1613
 msgid "bypass post-rewrite hook"
 msgstr "пропустить перехватчик после-перезаписи"
 
-#: builtin/commit.c:1619
+#: builtin/commit.c:1618
 msgid "ok to record an empty change"
 msgstr "разрешить запись пустого коммита"
 
-#: builtin/commit.c:1621
+#: builtin/commit.c:1620
 msgid "ok to record a change with an empty message"
 msgstr "разрешить запись изменений с пустым сообщением"
 
-#: builtin/commit.c:1650
+#: builtin/commit.c:1649
 msgid "could not parse HEAD commit"
 msgstr "не удалось разобрать HEAD коммит"
 
-#: builtin/commit.c:1689 builtin/merge.c:1076
-#, c-format
-msgid "could not open '%s' for reading"
-msgstr "не удалось открыть «%s» для чтения"
-
-#: builtin/commit.c:1696
+#: builtin/commit.c:1695
 #, c-format
 msgid "Corrupt MERGE_HEAD file (%s)"
 msgstr "Файл MERGE_HEAD поврежден (%s)"
 
-#: builtin/commit.c:1703
+#: builtin/commit.c:1702
 msgid "could not read MERGE_MODE"
 msgstr "не удалось прочитать MERGE_MODE"
 
-#: builtin/commit.c:1722
+#: builtin/commit.c:1721
 #, c-format
 msgid "could not read commit message: %s"
 msgstr "не удалось открыть сообщение коммита: %s"
 
-#: builtin/commit.c:1733
+#: builtin/commit.c:1732
 #, c-format
 msgid "Aborting commit; you did not edit the message.\n"
 msgstr "Отмена коммита; вы не изменили сообщение.\n"
 
-#: builtin/commit.c:1738
+#: builtin/commit.c:1737
 #, c-format
 msgid "Aborting commit due to empty commit message.\n"
 msgstr "Отмена коммита из-за пустого сообщения коммита.\n"
 
-#: builtin/commit.c:1753 builtin/merge.c:829 builtin/merge.c:854
-msgid "failed to write commit object"
-msgstr "сбой записи объекта коммита"
-
-#: builtin/commit.c:1786
+#: builtin/commit.c:1785
 msgid ""
 "Repository has been updated, but unable to write\n"
 "new_index file. Check that disk is not full and quota is\n"
@@ -4684,131 +5130,135 @@ msgstr "Репозиторий был обновлен, но не удалось
 msgid "git config [<options>]"
 msgstr "git config [<опции>]"
 
-#: builtin/config.c:53
+#: builtin/config.c:54
 msgid "Config file location"
 msgstr "Размещение файла конфигурации"
 
-#: builtin/config.c:54
+#: builtin/config.c:55
 msgid "use global config file"
 msgstr "использовать глобальный файл конфигурации"
 
-#: builtin/config.c:55
+#: builtin/config.c:56
 msgid "use system config file"
 msgstr "использовать системный файл конфигурации"
 
-#: builtin/config.c:56
+#: builtin/config.c:57
 msgid "use repository config file"
 msgstr "использовать файл конфигурации репозитория"
 
-#: builtin/config.c:57
+#: builtin/config.c:58
 msgid "use given config file"
 msgstr "использовать указанный файл конфигурации"
 
-#: builtin/config.c:58
+#: builtin/config.c:59
 msgid "blob-id"
 msgstr "идент-двоичн-объекта"
 
-#: builtin/config.c:58
+#: builtin/config.c:59
 msgid "read config from given blob object"
 msgstr "прочитать настройки из указанного двоичного объекта"
 
-#: builtin/config.c:59
+#: builtin/config.c:60
 msgid "Action"
 msgstr "Действие"
 
-#: builtin/config.c:60
+#: builtin/config.c:61
 msgid "get value: name [value-regex]"
 msgstr "получить значение: имя [шаблон-значений]"
 
-#: builtin/config.c:61
+#: builtin/config.c:62
 msgid "get all values: key [value-regex]"
 msgstr "получить все значения: ключ [шаблон-значений]"
 
-#: builtin/config.c:62
+#: builtin/config.c:63
 msgid "get values for regexp: name-regex [value-regex]"
 msgstr "получить значения по шаблону: шаблон-имен [шаблон-значений]"
 
-#: builtin/config.c:63
+#: builtin/config.c:64
 msgid "get value specific for the URL: section[.var] URL"
 msgstr "получить значение, специфичное для URL: раздел[.переменная] URL"
 
-#: builtin/config.c:64
+#: builtin/config.c:65
 msgid "replace all matching variables: name value [value_regex]"
 msgstr "заменить все соответствующие переменные: имя значение [шаблон-значений]"
 
-#: builtin/config.c:65
+#: builtin/config.c:66
 msgid "add a new variable: name value"
 msgstr "добавить новую переменную: имя значение"
 
-#: builtin/config.c:66
+#: builtin/config.c:67
 msgid "remove a variable: name [value-regex]"
 msgstr "удалить переменную: имя [шаблон-значений]"
 
-#: builtin/config.c:67
+#: builtin/config.c:68
 msgid "remove all matches: name [value-regex]"
 msgstr "удалить все совпадающие: имя [шаблон-значений]"
 
-#: builtin/config.c:68
+#: builtin/config.c:69
 msgid "rename section: old-name new-name"
 msgstr "переименовать раздел: старое-имя новое-имя"
 
-#: builtin/config.c:69
+#: builtin/config.c:70
 msgid "remove a section: name"
 msgstr "удалить раздел: имя"
 
-#: builtin/config.c:70
+#: builtin/config.c:71
 msgid "list all"
 msgstr "показать весь список"
 
-#: builtin/config.c:71
+#: builtin/config.c:72
 msgid "open an editor"
 msgstr "открыть в редакторе"
 
-#: builtin/config.c:72
+#: builtin/config.c:73
 msgid "find the color configured: slot [default]"
 msgstr "найти настроенный цвет: раздел [по-умолчанию]"
 
-#: builtin/config.c:73
+#: builtin/config.c:74
 msgid "find the color setting: slot [stdout-is-tty]"
 msgstr "проверить, существует ли настроенный цвет: раздел [stdout-есть-tty]"
 
-#: builtin/config.c:74
+#: builtin/config.c:75
 msgid "Type"
 msgstr "Тип"
 
-#: builtin/config.c:75
+#: builtin/config.c:76
 msgid "value is \"true\" or \"false\""
 msgstr "значение — это «true» (правда) или «false» (ложь)"
 
-#: builtin/config.c:76
+#: builtin/config.c:77
 msgid "value is decimal number"
 msgstr "значение — это десятичное число"
 
-#: builtin/config.c:77
+#: builtin/config.c:78
 msgid "value is --bool or --int"
 msgstr "значение — это --bool или --int"
 
-#: builtin/config.c:78
+#: builtin/config.c:79
 msgid "value is a path (file or directory name)"
 msgstr "значение — это путь (к файлу или каталогу)"
 
-#: builtin/config.c:79
+#: builtin/config.c:80
 msgid "Other"
 msgstr "Другое"
 
-#: builtin/config.c:80
+#: builtin/config.c:81
 msgid "terminate values with NUL byte"
 msgstr "завершать значения НУЛЕВЫМ байтом"
 
-#: builtin/config.c:81
+#: builtin/config.c:82
+msgid "show variable names only"
+msgstr "показывать только имена переменных"
+
+#: builtin/config.c:83
 msgid "respect include directives on lookup"
 msgstr "учитывать директивы include (включения файлов) при запросе"
 
-#: builtin/config.c:316
+#: builtin/config.c:311
 msgid "unable to parse default color value"
 msgstr "не удалось разобрать значение цвета по умолчанию"
 
-#: builtin/config.c:457
+#: builtin/config.c:449
 #, c-format
 msgid ""
 "# This is Git's per-user configuration file.\n"
@@ -4818,7 +5268,7 @@ msgid ""
 "#\temail = %s\n"
 msgstr "# Это файл конфигурации пользователя Git.\n[user]\n# Пожалуйста, адаптируйте и раскомментируйте следующие строки:\n#\tuser = %s\n#\temail = %s\n"
 
-#: builtin/config.c:587
+#: builtin/config.c:583
 #, c-format
 msgid "cannot create configuration file %s"
 msgstr "не удалось создать файл конфигурации %s"
@@ -4854,7 +5304,7 @@ msgstr "аннотированная метка %s не содержит вст
 msgid "tag '%s' is really '%s' here"
 msgstr "метка «%s» уже здесь «%s»"
 
-#: builtin/describe.c:250 builtin/log.c:452
+#: builtin/describe.c:250 builtin/log.c:459
 #, c-format
 msgid "Not a valid object name %s"
 msgstr "Недействительное имя объекта %s"
@@ -4994,502 +5444,491 @@ msgstr "передано больше двух двоичных объектов
 msgid "unhandled object '%s' given."
 msgstr "передан необработанный объект «%s»."
 
-#: builtin/fast-export.c:24
+#: builtin/fast-export.c:25
 msgid "git fast-export [rev-list-opts]"
 msgstr "git fast-export [опции-rev-list]"
 
-#: builtin/fast-export.c:979
+#: builtin/fast-export.c:980
 msgid "show progress after <n> objects"
 msgstr "показать прогресс после <n> объектов"
 
-#: builtin/fast-export.c:981
+#: builtin/fast-export.c:982
 msgid "select handling of signed tags"
 msgstr "выбор обработки подписанных меток"
 
-#: builtin/fast-export.c:984
+#: builtin/fast-export.c:985
 msgid "select handling of tags that tag filtered objects"
 msgstr "выбор обработки меток, которыми помечены отфильтрованные объекты"
 
-#: builtin/fast-export.c:987
+#: builtin/fast-export.c:988
 msgid "Dump marks to this file"
 msgstr "Записать пометки в этот файл"
 
-#: builtin/fast-export.c:989
+#: builtin/fast-export.c:990
 msgid "Import marks from this file"
 msgstr "Импортировать пометки из этого файла"
 
-#: builtin/fast-export.c:991
+#: builtin/fast-export.c:992
 msgid "Fake a tagger when tags lack one"
 msgstr "Подделать автора метки, если у метки он отсутствует"
 
-#: builtin/fast-export.c:993
+#: builtin/fast-export.c:994
 msgid "Output full tree for each commit"
 msgstr "Вывести полное дерево для каждого коммита"
 
-#: builtin/fast-export.c:995
+#: builtin/fast-export.c:996
 msgid "Use the done feature to terminate the stream"
 msgstr "Использовать пометку завершения в конце потока"
 
-#: builtin/fast-export.c:996
+#: builtin/fast-export.c:997
 msgid "Skip output of blob data"
 msgstr "Пропустить вывод данных двоичных объектов"
 
-#: builtin/fast-export.c:997
+#: builtin/fast-export.c:998
 msgid "refspec"
 msgstr "спецификация ссылки"
 
-#: builtin/fast-export.c:998
+#: builtin/fast-export.c:999
 msgid "Apply refspec to exported refs"
 msgstr "Применить спецификацию ссылки к экспортируемым ссылкам"
 
-#: builtin/fast-export.c:999
+#: builtin/fast-export.c:1000
 msgid "anonymize output"
 msgstr "сделать вывод анонимным"
 
-#: builtin/fetch.c:19
+#: builtin/fetch.c:20
 msgid "git fetch [<options>] [<repository> [<refspec>...]]"
 msgstr "git fetch [<опции>] [<репозиторий> [<спецификация-ссылки>…]]"
 
-#: builtin/fetch.c:20
+#: builtin/fetch.c:21
 msgid "git fetch [<options>] <group>"
 msgstr "git fetch [<опции>] <группа>"
 
-#: builtin/fetch.c:21
+#: builtin/fetch.c:22
 msgid "git fetch --multiple [<options>] [(<repository> | <group>)...]"
 msgstr "git fetch --multiple [<опции>] [(<репозиторий> | <группа>)…]"
 
-#: builtin/fetch.c:22
+#: builtin/fetch.c:23
 msgid "git fetch --all [<options>]"
 msgstr "git fetch --all [<опции>]"
 
-#: builtin/fetch.c:89
+#: builtin/fetch.c:90 builtin/pull.c:162
 msgid "fetch from all remotes"
 msgstr "извлечь со всех внешних репозиториев"
 
-#: builtin/fetch.c:91
+#: builtin/fetch.c:92 builtin/pull.c:165
 msgid "append to .git/FETCH_HEAD instead of overwriting"
 msgstr "дописать к .git/FETCH_HEAD вместо перезаписи"
 
-#: builtin/fetch.c:93
+#: builtin/fetch.c:94 builtin/pull.c:168
 msgid "path to upload pack on remote end"
 msgstr "путь к программе упаковки пакета на машине с внешним репозиторием"
 
-#: builtin/fetch.c:94
+#: builtin/fetch.c:95 builtin/pull.c:170
 msgid "force overwrite of local branch"
 msgstr "принудительная перезапись локальной ветки"
 
-#: builtin/fetch.c:96
+#: builtin/fetch.c:97
 msgid "fetch from multiple remotes"
 msgstr "извлечь с нескольких внешних репозиториев"
 
-#: builtin/fetch.c:98
+#: builtin/fetch.c:99 builtin/pull.c:172
 msgid "fetch all tags and associated objects"
 msgstr "извлечь все метки и связанные объекты"
 
-#: builtin/fetch.c:100
+#: builtin/fetch.c:101
 msgid "do not fetch all tags (--no-tags)"
 msgstr "не извлекать все метки (--no-tags)"
 
-#: builtin/fetch.c:102
+#: builtin/fetch.c:103 builtin/pull.c:175
 msgid "prune remote-tracking branches no longer on remote"
 msgstr "почистить отслеживаемые внешние ветки, которых уже нет на внешнем репозитории"
 
-#: builtin/fetch.c:103
+#: builtin/fetch.c:104 builtin/pull.c:178
 msgid "on-demand"
 msgstr "по требованию"
 
-#: builtin/fetch.c:104
+#: builtin/fetch.c:105 builtin/pull.c:179
 msgid "control recursive fetching of submodules"
 msgstr "управление рекурсивным извлечением подмодулей"
 
-#: builtin/fetch.c:108
+#: builtin/fetch.c:109 builtin/pull.c:184
 msgid "keep downloaded pack"
 msgstr "оставить загруженный пакет данных"
 
-#: builtin/fetch.c:110
+#: builtin/fetch.c:111
 msgid "allow updating of HEAD ref"
 msgstr "разрешить обновление ссылки HEAD"
 
-#: builtin/fetch.c:113
+#: builtin/fetch.c:114 builtin/pull.c:187
 msgid "deepen history of shallow clone"
 msgstr "глубокая история частичного клона"
 
-#: builtin/fetch.c:115
+#: builtin/fetch.c:116 builtin/pull.c:190
 msgid "convert to a complete repository"
 msgstr "преобразовать в полный репозиторий"
 
-#: builtin/fetch.c:117 builtin/log.c:1208
+#: builtin/fetch.c:118 builtin/log.c:1233
 msgid "dir"
 msgstr "каталог"
 
-#: builtin/fetch.c:118
+#: builtin/fetch.c:119
 msgid "prepend this to submodule path output"
 msgstr "присоединять это спереди к выводу путей подмодуля"
 
-#: builtin/fetch.c:121
+#: builtin/fetch.c:122
 msgid "default mode for recursion"
 msgstr "режим по умолчанию для рекурсии"
 
-#: builtin/fetch.c:123
+#: builtin/fetch.c:124 builtin/pull.c:193
 msgid "accept refs that update .git/shallow"
 msgstr "принимать ссылки, которые обновляют .git/shallow"
 
-#: builtin/fetch.c:124
+#: builtin/fetch.c:125 builtin/pull.c:195
 msgid "refmap"
 msgstr "соответствие-ссылок"
 
-#: builtin/fetch.c:125
+#: builtin/fetch.c:126 builtin/pull.c:196
 msgid "specify fetch refmap"
 msgstr "указать соответствие ссылок при извлечении"
 
-#: builtin/fetch.c:377
+#: builtin/fetch.c:378
 msgid "Couldn't find remote ref HEAD"
 msgstr "Не удалось найти ссылку HEAD на внешнем репозитории"
 
-#: builtin/fetch.c:457
+#: builtin/fetch.c:458
 #, c-format
 msgid "object %s not found"
 msgstr "объект %s не найден"
 
-#: builtin/fetch.c:462
+#: builtin/fetch.c:463
 msgid "[up to date]"
 msgstr "[актуально]"
 
-#: builtin/fetch.c:476
+#: builtin/fetch.c:477
 #, c-format
 msgid "! %-*s %-*s -> %s  (can't fetch in current branch)"
 msgstr "! %-*s %-*s → %s  (не удалось извлечь в текущую ветку)"
 
-#: builtin/fetch.c:477 builtin/fetch.c:563
+#: builtin/fetch.c:478 builtin/fetch.c:564
 msgid "[rejected]"
 msgstr "[отклонено]"
 
-#: builtin/fetch.c:488
+#: builtin/fetch.c:489
 msgid "[tag update]"
 msgstr "[обновление метки]"
 
-#: builtin/fetch.c:490 builtin/fetch.c:525 builtin/fetch.c:543
+#: builtin/fetch.c:491 builtin/fetch.c:526 builtin/fetch.c:544
 msgid "  (unable to update local ref)"
 msgstr "  (не удалось обновить локальную ссылку)"
 
-#: builtin/fetch.c:508
+#: builtin/fetch.c:509
 msgid "[new tag]"
 msgstr "[новая метка]"
 
-#: builtin/fetch.c:511
+#: builtin/fetch.c:512
 msgid "[new branch]"
 msgstr "[новая ветка]"
 
-#: builtin/fetch.c:514
+#: builtin/fetch.c:515
 msgid "[new ref]"
 msgstr "[новая ссылка]"
 
-#: builtin/fetch.c:559
+#: builtin/fetch.c:560
 msgid "unable to update local ref"
 msgstr "не удалось обновить локальную ссылку"
 
-#: builtin/fetch.c:559
+#: builtin/fetch.c:560
 msgid "forced update"
 msgstr "принудительное обновление"
 
-#: builtin/fetch.c:565
+#: builtin/fetch.c:566
 msgid "(non-fast-forward)"
 msgstr "(без перемотки вперед)"
 
-#: builtin/fetch.c:599 builtin/fetch.c:832
+#: builtin/fetch.c:600 builtin/fetch.c:842
 #, c-format
 msgid "cannot open %s: %s\n"
 msgstr "не удалось открыть %s: %s\n"
 
-#: builtin/fetch.c:608
+#: builtin/fetch.c:609
 #, c-format
 msgid "%s did not send all necessary objects\n"
 msgstr "%s не отправил все необходимые объекты\n"
 
-#: builtin/fetch.c:626
+#: builtin/fetch.c:627
 #, c-format
 msgid "reject %s because shallow roots are not allowed to be updated"
 msgstr "%s отклонено из-за того, что частичные корни не разрешено обновлять"
 
-#: builtin/fetch.c:714 builtin/fetch.c:797
+#: builtin/fetch.c:715 builtin/fetch.c:807
 #, c-format
 msgid "From %.*s\n"
 msgstr "Из %.*s\n"
 
-#: builtin/fetch.c:725
+#: builtin/fetch.c:726
 #, 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:777
+#: builtin/fetch.c:778
 #, c-format
 msgid "   (%s will become dangling)"
 msgstr "   (%s будет висящей веткой)"
 
-#: builtin/fetch.c:778
+#: builtin/fetch.c:779
 #, c-format
 msgid "   (%s has become dangling)"
 msgstr "   (%s стала висящей веткой)"
 
-#: builtin/fetch.c:802
+#: builtin/fetch.c:811
 msgid "[deleted]"
 msgstr "[удалено]"
 
-#: builtin/fetch.c:803 builtin/remote.c:1057
+#: builtin/fetch.c:812 builtin/remote.c:1034
 msgid "(none)"
 msgstr "(нет)"
 
-#: builtin/fetch.c:822
+#: builtin/fetch.c:832
 #, c-format
 msgid "Refusing to fetch into current branch %s of non-bare repository"
 msgstr "Отказ получения в текущую ветку %s не голого репозитория"
 
-#: builtin/fetch.c:841
+#: builtin/fetch.c:851
 #, c-format
 msgid "Option \"%s\" value \"%s\" is not valid for %s"
 msgstr "Неправильное значение «%2$s» для параметра «%1$s» для %3$s"
 
-#: builtin/fetch.c:844
+#: builtin/fetch.c:854
 #, c-format
 msgid "Option \"%s\" is ignored for %s\n"
 msgstr "Параметр «%s» игнорируется для %s\n"
 
-#: builtin/fetch.c:900
+#: builtin/fetch.c:910
 #, c-format
 msgid "Don't know how to fetch from %s"
 msgstr "Не знаю как извлечь с %s"
 
-#: builtin/fetch.c:1063
+#: builtin/fetch.c:1071
 #, c-format
 msgid "Fetching %s\n"
 msgstr "Извлечение из %s\n"
 
-#: builtin/fetch.c:1065 builtin/remote.c:90
+#: builtin/fetch.c:1073 builtin/remote.c:90
 #, c-format
 msgid "Could not fetch %s"
 msgstr "Не удалось извлечь %s"
 
-#: builtin/fetch.c:1083
+#: builtin/fetch.c:1091
 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:1106
+#: builtin/fetch.c:1114
 msgid "You need to specify a tag name."
 msgstr "Вам нужно указать имя метки."
 
-#: builtin/fetch.c:1148
+#: builtin/fetch.c:1156
 msgid "--depth and --unshallow cannot be used together"
 msgstr "нельзя использовать одновременно --depth и --unshallow"
 
-#: builtin/fetch.c:1150
+#: builtin/fetch.c:1158
 msgid "--unshallow on a complete repository does not make sense"
 msgstr "--unshallow не имеет смысла на полном репозитории"
 
-#: builtin/fetch.c:1173
+#: builtin/fetch.c:1181
 msgid "fetch --all does not take a repository argument"
 msgstr "fetch --all не принимает имя репозитория как аргумент"
 
-#: builtin/fetch.c:1175
+#: builtin/fetch.c:1183
 msgid "fetch --all does not make sense with refspecs"
 msgstr "fetch --all не имеет смысла при указании спецификаций ссылок"
 
-#: builtin/fetch.c:1186
+#: builtin/fetch.c:1194
 #, c-format
 msgid "No such remote or remote group: %s"
 msgstr "Нет такого внешнего репозитория или группы: %s"
 
-#: builtin/fetch.c:1194
+#: builtin/fetch.c:1202
 msgid "Fetching a group and specifying refspecs does not make sense"
 msgstr "Получение группы и указание спецификаций ссылок не имеет смысла"
 
-#: builtin/fmt-merge-msg.c:13
+#: builtin/fmt-merge-msg.c:14
 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:668 builtin/fmt-merge-msg.c:671 builtin/grep.c:698
-#: builtin/merge.c:198 builtin/repack.c:178 builtin/repack.c:182
-#: builtin/show-branch.c:664 builtin/show-ref.c:180 builtin/tag.c:590
-#: parse-options.h:131 parse-options.h:238
-msgid "n"
-msgstr "n"
-
-#: builtin/fmt-merge-msg.c:669
+#: builtin/fmt-merge-msg.c:670
 msgid "populate log with at most <n> entries from shortlog"
 msgstr "отправить в журнал <n> записей из короткого журнала"
 
-#: builtin/fmt-merge-msg.c:672
+#: builtin/fmt-merge-msg.c:673
 msgid "alias for --log (deprecated)"
 msgstr "сокращение для --log (устаревшее)"
 
-#: builtin/fmt-merge-msg.c:675
+#: builtin/fmt-merge-msg.c:676
 msgid "text"
 msgstr "текст"
 
-#: builtin/fmt-merge-msg.c:676
+#: builtin/fmt-merge-msg.c:677
 msgid "use <text> as start of message"
 msgstr "использовать <текст> как начальное сообщение"
 
-#: builtin/fmt-merge-msg.c:677
+#: builtin/fmt-merge-msg.c:678
 msgid "file to read from"
 msgstr "файл для чтения"
 
-#: builtin/for-each-ref.c:687
-msgid "unable to parse format"
-msgstr "не удалось разобрать формат"
-
-#: builtin/for-each-ref.c:1083
+#: builtin/for-each-ref.c:9
 msgid "git for-each-ref [<options>] [<pattern>]"
 msgstr "git for-each-ref [<опции>] [<шаблон>]"
 
-#: builtin/for-each-ref.c:1098
+#: builtin/for-each-ref.c:24
 msgid "quote placeholders suitably for shells"
 msgstr "выводить указатели места заполнения в подходящем формате для командного процессора"
 
-#: builtin/for-each-ref.c:1100
+#: builtin/for-each-ref.c:26
 msgid "quote placeholders suitably for perl"
 msgstr "выводить указатели места заполнения в подходящем формате для perl"
 
-#: builtin/for-each-ref.c:1102
+#: builtin/for-each-ref.c:28
 msgid "quote placeholders suitably for python"
 msgstr "выводить указатели места заполнения в подходящем формате для python"
 
-#: builtin/for-each-ref.c:1104
+#: builtin/for-each-ref.c:30
 msgid "quote placeholders suitably for Tcl"
 msgstr "выводить указатели места заполнения в подходящем формате для Tcl"
 
-#: builtin/for-each-ref.c:1107
+#: builtin/for-each-ref.c:33
 msgid "show only <n> matched refs"
 msgstr "показать только <n> совпадающих ссылок"
 
-#: builtin/for-each-ref.c:1108 builtin/replace.c:438
-msgid "format"
-msgstr "формат"
-
-#: builtin/for-each-ref.c:1108
+#: builtin/for-each-ref.c:34
 msgid "format to use for the output"
 msgstr "использовать формат для вывода"
 
-#: builtin/for-each-ref.c:1109
+#: builtin/for-each-ref.c:35
 msgid "key"
 msgstr "ключ"
 
-#: builtin/for-each-ref.c:1110
+#: builtin/for-each-ref.c:36
 msgid "field name to sort on"
 msgstr "имя поля, по которому выполнить сортировку"
 
-#: builtin/fsck.c:147 builtin/prune.c:137
+#: builtin/fsck.c:163 builtin/prune.c:137
 msgid "Checking connectivity"
 msgstr "Проверка соединения"
 
-#: builtin/fsck.c:548
+#: builtin/fsck.c:568
 msgid "Checking object directories"
 msgstr "Проверка каталогов объектов"
 
-#: builtin/fsck.c:611
+#: builtin/fsck.c:631
 msgid "git fsck [<options>] [<object>...]"
 msgstr "git fsck [<опции>] [<объект>…]"
 
-#: builtin/fsck.c:617
+#: builtin/fsck.c:637
 msgid "show unreachable objects"
 msgstr "показать недоступные объекты"
 
-#: builtin/fsck.c:618
+#: builtin/fsck.c:638
 msgid "show dangling objects"
 msgstr "показать объекты, на которые нет ссылок"
 
-#: builtin/fsck.c:619
+#: builtin/fsck.c:639
 msgid "report tags"
 msgstr "вывести отчет по меткам"
 
-#: builtin/fsck.c:620
+#: builtin/fsck.c:640
 msgid "report root nodes"
 msgstr "вывести отчет по корневым узлам"
 
-#: builtin/fsck.c:621
+#: builtin/fsck.c:641
 msgid "make index objects head nodes"
 msgstr "воспринимать объекты в индексе как корневые узлы"
 
-#: builtin/fsck.c:622
+#: builtin/fsck.c:642
 msgid "make reflogs head nodes (default)"
 msgstr "создать корневые узлы журналов ссылок (по умолчанию)"
 
-#: builtin/fsck.c:623
+#: builtin/fsck.c:643
 msgid "also consider packs and alternate objects"
 msgstr "также проверять пакеты и альтернативные объекты"
 
-#: builtin/fsck.c:624
+#: builtin/fsck.c:644
+msgid "check only connectivity"
+msgstr "только проверить соединение"
+
+#: builtin/fsck.c:645
 msgid "enable more strict checking"
 msgstr "использовать более строгую проверку"
 
-#: builtin/fsck.c:626
+#: builtin/fsck.c:647
 msgid "write dangling objects in .git/lost-found"
 msgstr "записать объекты на которые нет ссылок в .git/lost-found"
 
-#: builtin/fsck.c:627 builtin/prune.c:107
+#: builtin/fsck.c:648 builtin/prune.c:107
 msgid "show progress"
 msgstr "показать прогресс выполнения"
 
-#: builtin/fsck.c:677
+#: builtin/fsck.c:707
 msgid "Checking objects"
 msgstr "Проверка объектов"
 
-#: builtin/gc.c:24
+#: builtin/gc.c:25
 msgid "git gc [<options>]"
 msgstr "git gc [<опции>]"
 
-#: builtin/gc.c:67
+#: builtin/gc.c:55
 #, c-format
 msgid "Invalid %s: '%s'"
 msgstr "Недействительный %s: «%s»"
 
-#: builtin/gc.c:112
+#: builtin/gc.c:100
 #, c-format
 msgid "insanely long object directory %.*s"
 msgstr "слишком длинный путь к каталогу объекта %.*s"
 
-#: builtin/gc.c:281
+#: builtin/gc.c:269
 msgid "prune unreferenced objects"
 msgstr "почистить объекты, на которые нет ссылок"
 
-#: builtin/gc.c:283
+#: builtin/gc.c:271
 msgid "be more thorough (increased runtime)"
 msgstr "проверять более внимательно (занимает больше времени)"
 
-#: builtin/gc.c:284
+#: builtin/gc.c:272
 msgid "enable auto-gc mode"
 msgstr "включить режим auto-gc"
 
-#: builtin/gc.c:285
+#: builtin/gc.c:273
 msgid "force running gc even if there may be another gc running"
 msgstr "принудительно запустить gc, даже есть другая копия gc уже запущена"
 
-#: builtin/gc.c:327
+#: builtin/gc.c:315
 #, c-format
 msgid "Auto packing the repository in background for optimum performance.\n"
 msgstr "Автоматическая упаковка репозитория в фоне, для оптимальной производительности.\n"
 
-#: builtin/gc.c:329
+#: builtin/gc.c:317
 #, c-format
 msgid "Auto packing the repository for optimum performance.\n"
 msgstr "Автоматическая упаковка репозитория, для оптимальной производительности.\n"
 
-#: builtin/gc.c:330
+#: builtin/gc.c:318
 #, c-format
 msgid "See \"git help gc\" for manual housekeeping.\n"
 msgstr "Смотрите «git help gc» руководства по ручной очистке.\n"
 
-#: builtin/gc.c:348
+#: builtin/gc.c:336
 #, 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:376
+#: builtin/gc.c:364
 msgid ""
 "There are too many unreachable loose objects; run 'git prune' to remove "
 "them."
@@ -5730,7 +6169,7 @@ msgstr "git hash-object [-t <тип>] [-w] [--path=<файл> | --no-filters] [-
 msgid "git hash-object  --stdin-paths < <list-of-paths>"
 msgstr "git hash-object  --stdin-paths < <список-путей>"
 
-#: builtin/hash-object.c:92 builtin/tag.c:612
+#: builtin/hash-object.c:92 builtin/tag.c:614
 msgid "type"
 msgstr "тип"
 
@@ -5879,27 +6318,27 @@ msgstr "использование: %s%s"
 msgid "`git %s' is aliased to `%s'"
 msgstr "«git %s» — это сокращение для «%s»"
 
-#: builtin/index-pack.c:151
+#: builtin/index-pack.c:152
 #, c-format
 msgid "unable to open %s"
 msgstr "не удалось открыть %s"
 
-#: builtin/index-pack.c:201
+#: builtin/index-pack.c:202
 #, c-format
 msgid "object type mismatch at %s"
 msgstr "несоответствие типа объекта на %s"
 
-#: builtin/index-pack.c:221
+#: builtin/index-pack.c:222
 #, c-format
 msgid "did not receive expected object %s"
 msgstr "ожидаемый объект не получен на %s"
 
-#: builtin/index-pack.c:224
+#: builtin/index-pack.c:225
 #, c-format
 msgid "object %s: expected type %s, found %s"
 msgstr "объект %s: ожидаемый тип %s, получен %s"
 
-#: builtin/index-pack.c:266
+#: builtin/index-pack.c:267
 #, c-format
 msgid "cannot fill %d byte"
 msgid_plural "cannot fill %d bytes"
@@ -5908,69 +6347,69 @@ msgstr[1] "не удалось заполнить %d байта"
 msgstr[2] "не удалось заполнить %d байтов"
 msgstr[3] "не удалось заполнить %d байтов"
 
-#: builtin/index-pack.c:276
+#: builtin/index-pack.c:277
 msgid "early EOF"
 msgstr "неожиданный конец файла"
 
-#: builtin/index-pack.c:277
+#: builtin/index-pack.c:278
 msgid "read error on input"
 msgstr "ошибка чтения ввода"
 
-#: builtin/index-pack.c:289
+#: builtin/index-pack.c:290
 msgid "used more bytes than were available"
 msgstr "использовано больше байт, чем было доступно"
 
-#: builtin/index-pack.c:296
+#: builtin/index-pack.c:297
 msgid "pack too large for current definition of off_t"
 msgstr "пакет слишком большой для текущего определения off_t"
 
-#: builtin/index-pack.c:312
+#: builtin/index-pack.c:313
 #, c-format
 msgid "unable to create '%s'"
 msgstr "не удалось создать «%s»"
 
-#: builtin/index-pack.c:317
+#: builtin/index-pack.c:318
 #, c-format
 msgid "cannot open packfile '%s'"
 msgstr "не удалось открыть файл пакета «%s»"
 
-#: builtin/index-pack.c:331
+#: builtin/index-pack.c:332
 msgid "pack signature mismatch"
 msgstr "несоответствие подписи пакета"
 
-#: builtin/index-pack.c:333
+#: builtin/index-pack.c:334
 #, c-format
 msgid "pack version %<PRIu32> unsupported"
 msgstr "версия пакета %<PRIu32> не поддерживается"
 
-#: builtin/index-pack.c:351
+#: builtin/index-pack.c:352
 #, c-format
 msgid "pack has bad object at offset %lu: %s"
 msgstr "в пакете содержится поврежденный объект по смещению %lu: %s"
 
-#: builtin/index-pack.c:472
+#: builtin/index-pack.c:473
 #, c-format
 msgid "inflate returned %d"
 msgstr "программа сжатия вернула %d"
 
-#: builtin/index-pack.c:521
+#: builtin/index-pack.c:522
 msgid "offset value overflow for delta base object"
 msgstr "переполнение значения смещения у базового объекта дельты"
 
-#: builtin/index-pack.c:529
+#: builtin/index-pack.c:530
 msgid "delta base offset is out of bound"
 msgstr "смещение базовой дельты вышло за допустимые пределы"
 
-#: builtin/index-pack.c:537
+#: builtin/index-pack.c:538
 #, c-format
 msgid "unknown object type %d"
 msgstr "неизвестный тип объекта %d"
 
-#: builtin/index-pack.c:568
+#: builtin/index-pack.c:569
 msgid "cannot pread pack file"
 msgstr "не удалось выполнить pread для файла пакета"
 
-#: builtin/index-pack.c:570
+#: builtin/index-pack.c:571
 #, c-format
 msgid "premature end of pack file, %lu byte missing"
 msgid_plural "premature end of pack file, %lu bytes missing"
@@ -5979,33 +6418,33 @@ msgstr[1] "преждевременное окончание файла паке
 msgstr[2] "преждевременное окончание файла пакета, %lu байтов отсутствует"
 msgstr[3] "преждевременное окончание файла пакета, %lu байтов отсутствует"
 
-#: builtin/index-pack.c:596
+#: builtin/index-pack.c:597
 msgid "serious inflate inconsistency"
 msgstr "серьезное несоответствие при распаковке"
 
-#: builtin/index-pack.c:742 builtin/index-pack.c:748 builtin/index-pack.c:771
-#: builtin/index-pack.c:805 builtin/index-pack.c:814
+#: builtin/index-pack.c:743 builtin/index-pack.c:749 builtin/index-pack.c:772
+#: builtin/index-pack.c:806 builtin/index-pack.c:815
 #, c-format
 msgid "SHA1 COLLISION FOUND WITH %s !"
 msgstr "НАЙДЕНА КОЛЛИЗИЯ SHA1 С %s !"
 
-#: builtin/index-pack.c:745 builtin/pack-objects.c:162
+#: builtin/index-pack.c:746 builtin/pack-objects.c:162
 #: builtin/pack-objects.c:254
 #, c-format
 msgid "unable to read %s"
 msgstr "не удалось прочитать %s"
 
-#: builtin/index-pack.c:811
+#: builtin/index-pack.c:812
 #, c-format
 msgid "cannot read existing object %s"
 msgstr "не удалось прочитать существующий объект %s"
 
-#: builtin/index-pack.c:825
+#: builtin/index-pack.c:826
 #, c-format
 msgid "invalid blob object %s"
 msgstr "неправильный файл двоичного объекта %s"
 
-#: builtin/index-pack.c:839
+#: builtin/index-pack.c:840
 #, c-format
 msgid "invalid %s"
 msgstr "неправильный %s"
@@ -6121,7 +6560,7 @@ msgstr "плохой pack.indexversion=%<PRIu32>"
 msgid "invalid number of threads specified (%d)"
 msgstr "указано неправильное количество потоков (%d)"
 
-#: builtin/index-pack.c:1479 builtin/index-pack.c:1658
+#: builtin/index-pack.c:1479 builtin/index-pack.c:1663
 #, c-format
 msgid "no threads support, ignoring %s"
 msgstr "нет поддержки потоков, игнорирование %s"
@@ -6154,110 +6593,110 @@ msgstr[1] "длина цепочки = %d: %lu объекта"
 msgstr[2] "длина цепочки = %d: %lu объектов"
 msgstr[3] "длина цепочки = %d: %lu объектов"
 
-#: builtin/index-pack.c:1622
+#: builtin/index-pack.c:1623
 msgid "Cannot come back to cwd"
 msgstr "Не удалось вернуться в текущий рабочий каталог"
 
-#: builtin/index-pack.c:1670 builtin/index-pack.c:1673
-#: builtin/index-pack.c:1685 builtin/index-pack.c:1689
+#: builtin/index-pack.c:1675 builtin/index-pack.c:1678
+#: builtin/index-pack.c:1690 builtin/index-pack.c:1694
 #, c-format
 msgid "bad %s"
 msgstr "плохой %s"
 
-#: builtin/index-pack.c:1703
+#: builtin/index-pack.c:1708
 msgid "--fix-thin cannot be used without --stdin"
 msgstr "--fix-thin нельзя использовать без --stdin"
 
-#: builtin/index-pack.c:1707 builtin/index-pack.c:1716
+#: builtin/index-pack.c:1712 builtin/index-pack.c:1721
 #, c-format
 msgid "packfile name '%s' does not end with '.pack'"
 msgstr "имя пакета «%s» не оканчивается на «.pack»"
 
-#: builtin/index-pack.c:1724
+#: builtin/index-pack.c:1729
 msgid "--verify with no packfile name given"
 msgstr "--verify без указания имени файла пакета"
 
-#: builtin/init-db.c:35
+#: builtin/init-db.c:36
 #, c-format
 msgid "Could not make %s writable by group"
 msgstr "Не удалось предоставить доступ к %s на запись"
 
-#: builtin/init-db.c:62
+#: builtin/init-db.c:63
 #, c-format
 msgid "insanely long template name %s"
 msgstr "слишком длинное имя шаблона %s"
 
-#: builtin/init-db.c:67
+#: builtin/init-db.c:68
 #, c-format
 msgid "cannot stat '%s'"
 msgstr "не удалось выполнить stat для «%s»"
 
-#: builtin/init-db.c:73
+#: builtin/init-db.c:74
 #, c-format
 msgid "cannot stat template '%s'"
 msgstr "не удалось выполнить stat для шаблона «%s»"
 
-#: builtin/init-db.c:80
+#: builtin/init-db.c:81
 #, c-format
 msgid "cannot opendir '%s'"
 msgstr "не удалось выполнить opendir для «%s»"
 
-#: builtin/init-db.c:97
+#: builtin/init-db.c:98
 #, c-format
 msgid "cannot readlink '%s'"
 msgstr "не удалось выполнить readlink для «%s»"
 
-#: builtin/init-db.c:99
+#: builtin/init-db.c:100
 #, c-format
 msgid "insanely long symlink %s"
 msgstr "слишком длинная символьная ссылка %s"
 
-#: builtin/init-db.c:102
+#: builtin/init-db.c:103
 #, c-format
 msgid "cannot symlink '%s' '%s'"
 msgstr "не удалось создать символьную ссылку «%s» на «%s»"
 
-#: builtin/init-db.c:106
+#: builtin/init-db.c:107
 #, c-format
 msgid "cannot copy '%s' to '%s'"
 msgstr "не удалось скопировать файл «%s» в «%s»"
 
-#: builtin/init-db.c:110
+#: builtin/init-db.c:111
 #, c-format
 msgid "ignoring template %s"
 msgstr "игнорирование шаблона %s"
 
-#: builtin/init-db.c:136
+#: builtin/init-db.c:137
 #, c-format
 msgid "insanely long template path %s"
 msgstr "слишком длинный путь шаблона %s"
 
-#: builtin/init-db.c:144
+#: builtin/init-db.c:145
 #, c-format
 msgid "templates not found %s"
 msgstr "шаблоны не найдены %s"
 
-#: builtin/init-db.c:157
+#: builtin/init-db.c:158
 #, c-format
 msgid "not copying templates of a wrong format version %d from '%s'"
 msgstr "не копирую шаблоны в неправильной версии формата %d из «%s»"
 
-#: builtin/init-db.c:211
+#: builtin/init-db.c:212
 #, c-format
 msgid "insane git directory %s"
 msgstr "слишком длинный путь к каталогу git %s"
 
-#: builtin/init-db.c:343 builtin/init-db.c:346
+#: builtin/init-db.c:344 builtin/init-db.c:347
 #, c-format
 msgid "%s already exists"
 msgstr "%s уже существует"
 
-#: builtin/init-db.c:374
+#: builtin/init-db.c:375
 #, c-format
 msgid "unable to handle file type %d"
 msgstr "не удается обработать файл типа %d"
 
-#: builtin/init-db.c:377
+#: builtin/init-db.c:378
 #, c-format
 msgid "unable to move %s to %s"
 msgstr "не удается переместить файл %s в %s"
@@ -6265,59 +6704,55 @@ msgstr "не удается переместить файл %s в %s"
 #. TRANSLATORS: The first '%s' is either "Reinitialized
 #. existing" or "Initialized empty", the second " shared" or
 #. "", and the last '%s%s' is the verbatim directory name.
-#: builtin/init-db.c:433
+#: builtin/init-db.c:434
 #, c-format
 msgid "%s%s Git repository in %s%s\n"
 msgstr "%s%s репозиторий Git в %s%s\n"
 
-#: builtin/init-db.c:434
+#: builtin/init-db.c:435
 msgid "Reinitialized existing"
 msgstr "Реинициализация существующего"
 
-#: builtin/init-db.c:434
+#: builtin/init-db.c:435
 msgid "Initialized empty"
 msgstr "Инициализирован пустой"
 
-#: builtin/init-db.c:435
+#: builtin/init-db.c:436
 msgid " shared"
 msgstr " общий"
 
-#: builtin/init-db.c:482
+#: builtin/init-db.c:483
 msgid ""
 "git init [-q | --quiet] [--bare] [--template=<template-directory>] "
 "[--shared[=<permissions>]] [<directory>]"
 msgstr "git init [-q | --quiet] [--bare] [--template=<каталог-шаблонов>] [--shared[=<права-доступа>]] [<каталог>]"
 
-#: builtin/init-db.c:505
+#: builtin/init-db.c:506
 msgid "permissions"
 msgstr "права-доступа"
 
-#: builtin/init-db.c:506
+#: builtin/init-db.c:507
 msgid "specify that the git repository is to be shared amongst several users"
 msgstr "укажите, если репозиторий git будет использоваться несколькими пользователями"
 
-#: builtin/init-db.c:508 builtin/prune-packed.c:57 builtin/repack.c:171
-msgid "be quiet"
-msgstr "тихий режим"
-
-#: builtin/init-db.c:540 builtin/init-db.c:545
+#: builtin/init-db.c:541 builtin/init-db.c:546
 #, c-format
 msgid "cannot mkdir %s"
 msgstr "не удалось выполнить mkdir %s"
 
-#: builtin/init-db.c:549
+#: builtin/init-db.c:550
 #, c-format
 msgid "cannot chdir to %s"
 msgstr "не удалось выполнить chdir в %s"
 
-#: builtin/init-db.c:570
+#: builtin/init-db.c:571
 #, 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:598
+#: builtin/init-db.c:599
 #, c-format
 msgid "Cannot access work tree '%s'"
 msgstr "Не удалось получить доступ к рабочему каталогу «%s»"
@@ -6340,284 +6775,279 @@ msgstr "завершитель"
 msgid "trailer(s) to add"
 msgstr "завершители для добавления"
 
-#: builtin/log.c:41
+#: builtin/log.c:43
 msgid "git log [<options>] [<revision-range>] [[--] <path>...]"
 msgstr "git log [<опции>] [<диапазон-редакций>] [[--] <путь>…]"
 
-#: builtin/log.c:42
+#: builtin/log.c:44
 msgid "git show [<options>] <object>..."
 msgstr "git show [<опции>] <объект>…"
 
-#: builtin/log.c:81
+#: builtin/log.c:83
 #, c-format
 msgid "invalid --decorate option: %s"
 msgstr "неправильный параметр для --decorate: %s"
 
-#: builtin/log.c:127
+#: builtin/log.c:131
 msgid "suppress diff output"
 msgstr "не выводить различия"
 
-#: builtin/log.c:128
+#: builtin/log.c:132
 msgid "show source"
 msgstr "показать источник"
 
-#: builtin/log.c:129
+#: builtin/log.c:133
 msgid "Use mail map file"
 msgstr "Использовать файл соответствия почтовых адресов"
 
-#: builtin/log.c:130
+#: builtin/log.c:134
 msgid "decorate options"
 msgstr "опции формата вывода ссылок"
 
-#: builtin/log.c:133
+#: builtin/log.c:137
 msgid "Process line range n,m in file, counting from 1"
 msgstr "Обработать диапазон строк n,m из файла, начиная с 1"
 
-#: builtin/log.c:229
+#: builtin/log.c:233
 #, c-format
 msgid "Final output: %d %s\n"
 msgstr "Финальный вывод: %d %s\n"
 
-#: builtin/log.c:458
+#: builtin/log.c:465
 #, c-format
 msgid "git show %s: bad file"
 msgstr "git show %s: плохой файл"
 
-#: builtin/log.c:472 builtin/log.c:564
+#: builtin/log.c:479 builtin/log.c:572
 #, c-format
 msgid "Could not read object %s"
 msgstr "Не удалось прочитать объект %s"
 
-#: builtin/log.c:588
+#: builtin/log.c:596
 #, c-format
 msgid "Unknown type: %d"
 msgstr "Неизвестный тип объекта: %d"
 
-#: builtin/log.c:689
+#: builtin/log.c:714
 msgid "format.headers without value"
 msgstr "в format.headers не указано значение"
 
-#: builtin/log.c:773
+#: builtin/log.c:798
 msgid "name of output directory is too long"
 msgstr "слишком длинное имя выходного каталога"
 
-#: builtin/log.c:789
+#: builtin/log.c:814
 #, c-format
 msgid "Cannot open patch file %s"
 msgstr "Ну удалось открыть файл изменений %s"
 
-#: builtin/log.c:803
+#: builtin/log.c:828
 msgid "Need exactly one range."
 msgstr "Нужен только один диапазон."
 
-#: builtin/log.c:813
+#: builtin/log.c:838
 msgid "Not a range."
 msgstr "Не является диапазоном."
 
-#: builtin/log.c:919
+#: builtin/log.c:944
 msgid "Cover letter needs email format"
 msgstr "Сопроводительное письмо должно быть в формате электронной почты"
 
-#: builtin/log.c:998
+#: builtin/log.c:1023
 #, c-format
 msgid "insane in-reply-to: %s"
 msgstr "ошибка в поле in-reply-to: %s"
 
-#: builtin/log.c:1026
+#: builtin/log.c:1051
 msgid "git format-patch [<options>] [<since> | <revision-range>]"
 msgstr "git format-patch [<опции>] [<начиная-с> | <диапазон-редакций>]"
 
-#: builtin/log.c:1071
+#: builtin/log.c:1096
 msgid "Two output directories?"
 msgstr "Два выходных каталога?"
 
-#: builtin/log.c:1186
+#: builtin/log.c:1211
 msgid "use [PATCH n/m] even with a single patch"
 msgstr "выводить [PATCH n/m] даже когда один патч"
 
-#: builtin/log.c:1189
+#: builtin/log.c:1214
 msgid "use [PATCH] even with multiple patches"
 msgstr "выводить [PATCH] даже когда несколько патчей"
 
-#: builtin/log.c:1193
+#: builtin/log.c:1218
 msgid "print patches to standard out"
 msgstr "выводить патчи на стандартный вывод"
 
-#: builtin/log.c:1195
+#: builtin/log.c:1220
 msgid "generate a cover letter"
 msgstr "генерировать сопроводительное письмо"
 
-#: builtin/log.c:1197
+#: builtin/log.c:1222
 msgid "use simple number sequence for output file names"
 msgstr "использовать простую последовательность чисел для имен выходных файлов"
 
-#: builtin/log.c:1198
+#: builtin/log.c:1223
 msgid "sfx"
 msgstr "суффикс"
 
-#: builtin/log.c:1199
+#: builtin/log.c:1224
 msgid "use <sfx> instead of '.patch'"
 msgstr "использовать суффикс <суффикс> вместо «.patch»"
 
-#: builtin/log.c:1201
+#: builtin/log.c:1226
 msgid "start numbering patches at <n> instead of 1"
 msgstr "начать нумерацию патчей с <n>, а не с 1"
 
-#: builtin/log.c:1203
+#: builtin/log.c:1228
 msgid "mark the series as Nth re-roll"
 msgstr "пометить серию как энную попытку"
 
-#: builtin/log.c:1205
+#: builtin/log.c:1230
 msgid "Use [<prefix>] instead of [PATCH]"
 msgstr "Использовать [<префикс>] вместо [PATCH]"
 
-#: builtin/log.c:1208
+#: builtin/log.c:1233
 msgid "store resulting files in <dir>"
 msgstr "сохранить результирующие файлы в <каталог>"
 
-#: builtin/log.c:1211
+#: builtin/log.c:1236
 msgid "don't strip/add [PATCH]"
 msgstr "не обрезать/добавлять [PATCH]"
 
-#: builtin/log.c:1214
+#: builtin/log.c:1239
 msgid "don't output binary diffs"
 msgstr "не выводить двоичные различия"
 
-#: builtin/log.c:1216
+#: builtin/log.c:1241
 msgid "don't include a patch matching a commit upstream"
 msgstr "не включать патч, если коммит уже есть в вышестоящей ветке"
 
-#: builtin/log.c:1218
+#: builtin/log.c:1243
 msgid "show patch format instead of default (patch + stat)"
 msgstr "выводить в формате патча, а не в стандартном (патч + статистика)"
 
-#: builtin/log.c:1220
+#: builtin/log.c:1245
 msgid "Messaging"
 msgstr "Передача сообщений"
 
-#: builtin/log.c:1221
+#: builtin/log.c:1246
 msgid "header"
 msgstr "заголовок"
 
-#: builtin/log.c:1222
+#: builtin/log.c:1247
 msgid "add email header"
 msgstr "добавить заголовок сообщения"
 
-#: builtin/log.c:1223 builtin/log.c:1225
+#: builtin/log.c:1248 builtin/log.c:1250
 msgid "email"
 msgstr "почта"
 
-#: builtin/log.c:1223
+#: builtin/log.c:1248
 msgid "add To: header"
 msgstr "добавить заголовок To:"
 
-#: builtin/log.c:1225
+#: builtin/log.c:1250
 msgid "add Cc: header"
 msgstr "добавить заголовок Cc:"
 
-#: builtin/log.c:1227
+#: builtin/log.c:1252
 msgid "ident"
 msgstr "идентификатор"
 
-#: builtin/log.c:1228
+#: builtin/log.c:1253
 msgid "set From address to <ident> (or committer ident if absent)"
 msgstr "установить адрес отправителя на <идентификатор> (или на идентификатор коммитера, если отсутствует)"
 
-#: builtin/log.c:1230
+#: builtin/log.c:1255
 msgid "message-id"
 msgstr "идентификатор-сообщения"
 
-#: builtin/log.c:1231
+#: builtin/log.c:1256
 msgid "make first mail a reply to <message-id>"
 msgstr "сделать первое письмо ответом на <идентификатор-сообщения>"
 
-#: builtin/log.c:1232 builtin/log.c:1235
+#: builtin/log.c:1257 builtin/log.c:1260
 msgid "boundary"
 msgstr "вложение"
 
-#: builtin/log.c:1233
+#: builtin/log.c:1258
 msgid "attach the patch"
 msgstr "приложить патч"
 
-#: builtin/log.c:1236
+#: builtin/log.c:1261
 msgid "inline the patch"
 msgstr "включить патч в текст письма"
 
-#: builtin/log.c:1240
+#: builtin/log.c:1265
 msgid "enable message threading, styles: shallow, deep"
 msgstr "включить в письмах иерархичность, стили: shallow (частичную), deep (глубокую)"
 
-#: builtin/log.c:1242
+#: builtin/log.c:1267
 msgid "signature"
 msgstr "подпись"
 
-#: builtin/log.c:1243
+#: builtin/log.c:1268
 msgid "add a signature"
 msgstr "добавить подпись"
 
-#: builtin/log.c:1245
+#: builtin/log.c:1270
 msgid "add a signature from a file"
 msgstr "добавить подпись из файла"
 
-#: builtin/log.c:1246
+#: builtin/log.c:1271
 msgid "don't print the patch filenames"
 msgstr "не выводить имена файлов патчей"
 
-#: builtin/log.c:1320
-#, c-format
-msgid "invalid ident line: %s"
-msgstr "неправильная строка идентификации: %s"
-
-#: builtin/log.c:1335
+#: builtin/log.c:1360
 msgid "-n and -k are mutually exclusive."
 msgstr "-n и -k нельзя использовать одновременно"
 
-#: builtin/log.c:1337
+#: builtin/log.c:1362
 msgid "--subject-prefix and -k are mutually exclusive."
 msgstr "--subject-prefix и -k нельзя использовать одновременно."
 
-#: builtin/log.c:1345
+#: builtin/log.c:1370
 msgid "--name-only does not make sense"
 msgstr "--name-only не имеет смысла"
 
-#: builtin/log.c:1347
+#: builtin/log.c:1372
 msgid "--name-status does not make sense"
 msgstr "--name-status не имеет смысла"
 
-#: builtin/log.c:1349
+#: builtin/log.c:1374
 msgid "--check does not make sense"
 msgstr "--check не имеет смысла"
 
-#: builtin/log.c:1372
+#: builtin/log.c:1397
 msgid "standard output, or directory, which one?"
 msgstr "стандартный вывод или каталог?"
 
-#: builtin/log.c:1374
+#: builtin/log.c:1399
 #, c-format
 msgid "Could not create directory '%s'"
 msgstr "Не удалось создать каталог «%s»"
 
-#: builtin/log.c:1472
+#: builtin/log.c:1496
 #, c-format
 msgid "unable to read signature file '%s'"
 msgstr "не удалось прочитать файл подписи «%s»"
 
-#: builtin/log.c:1535
+#: builtin/log.c:1559
 msgid "Failed to create output files"
 msgstr "Сбой при создании выходных файлов"
 
-#: builtin/log.c:1583
+#: builtin/log.c:1607
 msgid "git cherry [-v] [<upstream> [<head> [<limit>]]]"
 msgstr "git cherry [-v] [<вышестоящая-ветка> [<голова> [<ограничение>]]]"
 
-#: builtin/log.c:1637
+#: builtin/log.c:1661
 #, c-format
 msgid ""
 "Could not find a tracked remote branch, please specify <upstream> "
 "manually.\n"
 msgstr "Не удалось найти отслеживаемую внешнюю ветку, укажите <вышестоящую-ветку> вручную.\n"
 
-#: builtin/log.c:1648 builtin/log.c:1650 builtin/log.c:1662
+#: builtin/log.c:1672 builtin/log.c:1674 builtin/log.c:1686
 #, c-format
 msgid "Unknown commit %s"
 msgstr "Неизвестный коммит %s"
@@ -6781,31 +7211,31 @@ msgstr "Доступные стратегии:"
 msgid "Available custom strategies are:"
 msgstr "Доступные пользовательские стратегии:"
 
-#: builtin/merge.c:193
+#: builtin/merge.c:193 builtin/pull.c:119
 msgid "do not show a diffstat at the end of the merge"
 msgstr "не выводить статистику изменений после окончания слияния"
 
-#: builtin/merge.c:196
+#: builtin/merge.c:196 builtin/pull.c:122
 msgid "show a diffstat at the end of the merge"
 msgstr "вывести статистику изменений после окончания слияния"
 
-#: builtin/merge.c:197
+#: builtin/merge.c:197 builtin/pull.c:125
 msgid "(synonym to --stat)"
 msgstr "(синоним для --stat)"
 
-#: builtin/merge.c:199
+#: builtin/merge.c:199 builtin/pull.c:128
 msgid "add (at most <n>) entries from shortlog to merge commit message"
 msgstr "добавить (максимум <n>) записей из короткого журнала в сообщение коммита у слияния"
 
-#: builtin/merge.c:202
+#: builtin/merge.c:202 builtin/pull.c:131
 msgid "create a single commit instead of doing a merge"
 msgstr "создать один коммит, вместо выполнения слияния"
 
-#: builtin/merge.c:204
+#: builtin/merge.c:204 builtin/pull.c:134
 msgid "perform a commit if the merge succeeds (default)"
 msgstr "сделать коммит, если слияние прошло успешно (по умолчанию)"
 
-#: builtin/merge.c:206
+#: builtin/merge.c:206 builtin/pull.c:137
 msgid "edit message before committing"
 msgstr "отредактировать сообщение перед выполнением коммита"
 
@@ -6813,7 +7243,7 @@ msgstr "отредактировать сообщение перед выпол
 msgid "allow fast-forward (default)"
 msgstr "разрешить перемотку вперед (по умолчанию)"
 
-#: builtin/merge.c:209
+#: builtin/merge.c:209 builtin/pull.c:143
 msgid "abort if fast-forward is not possible"
 msgstr "отменить выполнение слияния, если перемотка вперед не возможна"
 
@@ -6821,19 +7251,20 @@ msgstr "отменить выполнение слияния, если пере
 msgid "Verify that the named commit has a valid GPG signature"
 msgstr "Проверить, что указанный коммит имеет верную электронную подпись GPG"
 
-#: builtin/merge.c:214 builtin/notes.c:753 builtin/revert.c:89
+#: builtin/merge.c:214 builtin/notes.c:767 builtin/pull.c:148
+#: builtin/revert.c:89
 msgid "strategy"
 msgstr "стратегия"
 
-#: builtin/merge.c:215
+#: builtin/merge.c:215 builtin/pull.c:149
 msgid "merge strategy to use"
 msgstr "используемая стратегия слияния"
 
-#: builtin/merge.c:216
+#: builtin/merge.c:216 builtin/pull.c:152
 msgid "option=value"
 msgstr "опция=значение"
 
-#: builtin/merge.c:217
+#: builtin/merge.c:217 builtin/pull.c:153
 msgid "option for selected merge strategy"
 msgstr "опции для выбранной стратегии слияния"
 
@@ -6871,6 +7302,12 @@ msgstr " (нечего уплотнять)"
 msgid "Squash commit -- not updating HEAD\n"
 msgstr "Уплотнение коммита — не обновляя HEAD\n"
 
+#: builtin/merge.c:344 builtin/merge.c:763 builtin/merge.c:975
+#: builtin/merge.c:988
+#, c-format
+msgid "Could not write to '%s'"
+msgstr "Не удалось записать в «%s»"
+
 #: builtin/merge.c:372
 msgid "Writing SQUASH_MSG"
 msgstr "Запись SQUASH_MSG"
@@ -6894,10 +7331,6 @@ msgstr "«%s» не указывает на коммит"
 msgid "Bad branch.%s.mergeoptions string: %s"
 msgstr "Неправильная строка branch.%s.mergeoptions: %s"
 
-#: builtin/merge.c:632
-msgid "git write-tree failed to write a tree"
-msgstr "git write-tree не удалось записать дерево"
-
 #: builtin/merge.c:656
 msgid "Not handling anything other than two heads merge."
 msgstr "Не обрабатываю ничего, кроме слияния двух указателей на коммиты."
@@ -6983,10 +7416,6 @@ msgid ""
 "Please, commit your changes before you merge."
 msgstr "Вы не завершили слияние (присутствует файл MERGE_HEAD).\nВыполните коммит ваших изменений, перед слиянием."
 
-#: builtin/merge.c:1227 git-pull.sh:74
-msgid "You have not concluded your merge (MERGE_HEAD exists)."
-msgstr "Вы не завершили слияние (присутствует файл MERGE_HEAD)."
-
 #: builtin/merge.c:1231
 msgid ""
 "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n"
@@ -7272,7 +7701,7 @@ msgstr "%s, откуда=%s, куда=%s"
 msgid "Renaming %s to %s\n"
 msgstr "Переименование %s в %s\n"
 
-#: builtin/mv.c:256 builtin/remote.c:725 builtin/repack.c:361
+#: builtin/mv.c:256 builtin/remote.c:722 builtin/repack.c:362
 #, c-format
 msgid "renaming '%s' failed"
 msgstr "сбой при переименовании «%s»"
@@ -7317,332 +7746,329 @@ msgstr "разрешить вывод «undefined», если не найден
 msgid "dereference tags in the input (internal use)"
 msgstr "разыменовывать введенные метки (для внутреннего использования)"
 
-#: builtin/notes.c:24
+#: builtin/notes.c:25
 msgid "git notes [--ref <notes-ref>] [list [<object>]]"
 msgstr "git notes [--ref <ссылка-на-заметку>] [list [<объект>]]"
 
-#: builtin/notes.c:25
+#: builtin/notes.c:26
 msgid ""
 "git notes [--ref <notes-ref>] add [-f] [--allow-empty] [-m <msg> | -F <file>"
 " | (-c | -C) <object>] [<object>]"
 msgstr "git notes [--ref <ссылка-на-заметку>] add [-f] [--allow-empty] [-m <сообщение> | -F <файл> | (-c | -C) <объект>] [<объект>]"
 
-#: builtin/notes.c:26
+#: builtin/notes.c:27
 msgid "git notes [--ref <notes-ref>] copy [-f] <from-object> <to-object>"
 msgstr "git notes [--ref <ссылка-на-заметку>] copy [-f] <из-объекта> <в-объект>"
 
-#: builtin/notes.c:27
+#: builtin/notes.c:28
 msgid ""
 "git notes [--ref <notes-ref>] append [--allow-empty] [-m <msg> | -F <file> |"
 " (-c | -C) <object>] [<object>]"
 msgstr "git notes [--ref <ссылка-на-заметку>] append [--allow-empty] [-m <сообщение> | -F <файл> | (-c | -C) <объект>] [<объект>]"
 
-#: builtin/notes.c:28
+#: builtin/notes.c:29
 msgid "git notes [--ref <notes-ref>] edit [--allow-empty] [<object>]"
 msgstr "git notes [--ref <ссылка-на-заметку>] edit [--allow-empty] [<объект>]"
 
-#: builtin/notes.c:29
+#: builtin/notes.c:30
 msgid "git notes [--ref <notes-ref>] show [<object>]"
 msgstr "git notes [--ref <ссылка-на-заметку>] show [<объект>]"
 
-#: builtin/notes.c:30
+#: builtin/notes.c:31
 msgid ""
 "git notes [--ref <notes-ref>] merge [-v | -q] [-s <strategy>] <notes-ref>"
 msgstr "git notes [--ref <ссылка-на-заметку>] merge [-v | -q] [-s <стратегия>] <ссылка-на-заметку>"
 
-#: builtin/notes.c:31
+#: builtin/notes.c:32
 msgid "git notes merge --commit [-v | -q]"
 msgstr "git notes merge --commit [-v | -q]"
 
-#: builtin/notes.c:32
+#: builtin/notes.c:33
 msgid "git notes merge --abort [-v | -q]"
 msgstr "git notes merge --abort [-v | -q]"
 
-#: builtin/notes.c:33
+#: builtin/notes.c:34
 msgid "git notes [--ref <notes-ref>] remove [<object>...]"
 msgstr "git notes [--ref <ссылка-на-заметку>] remove [<объект>…]"
 
-#: builtin/notes.c:34
+#: builtin/notes.c:35
 msgid "git notes [--ref <notes-ref>] prune [-n | -v]"
 msgstr "git notes [--ref <ссылка-на-заметку>] prune [-n | -v]"
 
-#: builtin/notes.c:35
+#: builtin/notes.c:36
 msgid "git notes [--ref <notes-ref>] get-ref"
 msgstr "git notes [--ref <ссылка-на-заметку>] get-ref"
 
-#: builtin/notes.c:40
+#: builtin/notes.c:41
 msgid "git notes [list [<object>]]"
 msgstr "git notes [list [<объект>]]"
 
-#: builtin/notes.c:45
+#: builtin/notes.c:46
 msgid "git notes add [<options>] [<object>]"
 msgstr "git notes add [<опции>] [<объект>]"
 
-#: builtin/notes.c:50
+#: builtin/notes.c:51
 msgid "git notes copy [<options>] <from-object> <to-object>"
 msgstr "git notes copy [<опции>] <из-объекта> <в-объект>"
 
-#: builtin/notes.c:51
+#: builtin/notes.c:52
 msgid "git notes copy --stdin [<from-object> <to-object>]..."
 msgstr "git notes copy --stdin [<из-объекта> <в-объект>]…"
 
-#: builtin/notes.c:56
+#: builtin/notes.c:57
 msgid "git notes append [<options>] [<object>]"
 msgstr "git notes append [<опции>] [<объект>]"
 
-#: builtin/notes.c:61
+#: builtin/notes.c:62
 msgid "git notes edit [<object>]"
 msgstr "git notes edit [<объект>]"
 
-#: builtin/notes.c:66
+#: builtin/notes.c:67
 msgid "git notes show [<object>]"
 msgstr "git notes show [<объект>]"
 
-#: builtin/notes.c:71
+#: builtin/notes.c:72
 msgid "git notes merge [<options>] <notes-ref>"
 msgstr "git notes merge [<опции>] <ссылка-на-заметку>"
 
-#: builtin/notes.c:72
+#: builtin/notes.c:73
 msgid "git notes merge --commit [<options>]"
 msgstr "git notes merge --commit [<опции>]"
 
-#: builtin/notes.c:73
+#: builtin/notes.c:74
 msgid "git notes merge --abort [<options>]"
 msgstr "git notes merge --abort [<опции>]"
 
-#: builtin/notes.c:78
+#: builtin/notes.c:79
 msgid "git notes remove [<object>]"
 msgstr "git notes remove [<опции>]"
 
-#: builtin/notes.c:83
+#: builtin/notes.c:84
 msgid "git notes prune [<options>]"
 msgstr "git notes prune [<опции>]"
 
-#: builtin/notes.c:88
+#: builtin/notes.c:89
 msgid "git notes get-ref"
 msgstr "git notes get-ref"
 
-#: builtin/notes.c:146
+#: builtin/notes.c:147
 #, c-format
 msgid "unable to start 'show' for object '%s'"
 msgstr "не удалось запустить «show» для объекта «%s»"
 
-#: builtin/notes.c:150
+#: builtin/notes.c:151
 msgid "could not read 'show' output"
 msgstr "не удалось прочитать вывод «show»"
 
-#: builtin/notes.c:158
+#: builtin/notes.c:159
 #, c-format
 msgid "failed to finish 'show' for object '%s'"
 msgstr "не удалось завершить «show» для объекта «%s»"
 
-#: builtin/notes.c:173 builtin/tag.c:477
+#: builtin/notes.c:174 builtin/tag.c:477
 #, c-format
 msgid "could not create file '%s'"
 msgstr "не удалось создать файл «%s»"
 
-#: builtin/notes.c:192
+#: builtin/notes.c:193
 msgid "Please supply the note contents using either -m or -F option"
 msgstr "Пожалуйста, укажите содержимое заметки, используя опцию -m или -F"
 
-#: builtin/notes.c:201
+#: builtin/notes.c:202
 msgid "unable to write note object"
 msgstr "не удалось записать объект заметки"
 
-#: builtin/notes.c:203
+#: builtin/notes.c:204
 #, c-format
 msgid "The note contents have been left in %s"
 msgstr "Содержимое заметки осталось в %s"
 
-#: builtin/notes.c:231 builtin/tag.c:693
+#: builtin/notes.c:232 builtin/tag.c:695
 #, c-format
 msgid "cannot read '%s'"
 msgstr "не удалось прочитать «%s»"
 
-#: builtin/notes.c:233 builtin/tag.c:696
+#: builtin/notes.c:234 builtin/tag.c:698
 #, c-format
 msgid "could not open or read '%s'"
 msgstr "не удалось открыть или прочитать «%s»"
 
-#: builtin/notes.c:252 builtin/notes.c:303 builtin/notes.c:305
-#: builtin/notes.c:365 builtin/notes.c:420 builtin/notes.c:506
-#: builtin/notes.c:511 builtin/notes.c:589 builtin/notes.c:652
-#: builtin/notes.c:854 builtin/tag.c:709
+#: builtin/notes.c:253 builtin/notes.c:304 builtin/notes.c:306
+#: builtin/notes.c:366 builtin/notes.c:421 builtin/notes.c:507
+#: builtin/notes.c:512 builtin/notes.c:590 builtin/notes.c:653
+#: builtin/notes.c:877 builtin/tag.c:711
 #, c-format
 msgid "Failed to resolve '%s' as a valid ref."
 msgstr "Не удалось разрешить «%s» как ссылку."
 
-#: builtin/notes.c:255
+#: builtin/notes.c:256
 #, c-format
 msgid "Failed to read object '%s'."
 msgstr "Не удалось прочитать объект «%s»."
 
-#: builtin/notes.c:259
+#: builtin/notes.c:260
 #, c-format
 msgid "Cannot read note data from non-blob object '%s'."
 msgstr "Не удалось прочитать данные заметки из недвоичного объекта «%s»."
 
-#: builtin/notes.c:299
-#, c-format
-msgid "Malformed input line: '%s'."
-msgstr "Плохая строка ввода: «%s»."
-
-#: builtin/notes.c:314
-#, c-format
-msgid "Failed to copy notes from '%s' to '%s'"
-msgstr "Не удалось скопировать заметку из «%s» в «%s»"
-
-#: builtin/notes.c:358 builtin/notes.c:413 builtin/notes.c:489
-#: builtin/notes.c:501 builtin/notes.c:577 builtin/notes.c:645
-#: builtin/notes.c:919
+#: builtin/notes.c:359 builtin/notes.c:414 builtin/notes.c:490
+#: builtin/notes.c:502 builtin/notes.c:578 builtin/notes.c:646
+#: builtin/notes.c:942
 msgid "too many parameters"
 msgstr "передано слишком много параметров"
 
-#: builtin/notes.c:371 builtin/notes.c:658
+#: builtin/notes.c:372 builtin/notes.c:659
 #, c-format
 msgid "No note found for object %s."
 msgstr "Не найдена заметка для объекта %s."
 
-#: builtin/notes.c:392 builtin/notes.c:555
+#: builtin/notes.c:393 builtin/notes.c:556
 msgid "note contents as a string"
 msgstr "текстовое содержимое заметки"
 
-#: builtin/notes.c:395 builtin/notes.c:558
+#: builtin/notes.c:396 builtin/notes.c:559
 msgid "note contents in a file"
 msgstr "содержимое заметки в файле"
 
-#: builtin/notes.c:397 builtin/notes.c:400 builtin/notes.c:560
-#: builtin/notes.c:563 builtin/tag.c:628
+#: builtin/notes.c:398 builtin/notes.c:401 builtin/notes.c:561
+#: builtin/notes.c:564 builtin/tag.c:630
 msgid "object"
 msgstr "объект"
 
-#: builtin/notes.c:398 builtin/notes.c:561
+#: builtin/notes.c:399 builtin/notes.c:562
 msgid "reuse and edit specified note object"
 msgstr "использовать и отредактировать указанный объект заметки"
 
-#: builtin/notes.c:401 builtin/notes.c:564
+#: builtin/notes.c:402 builtin/notes.c:565
 msgid "reuse specified note object"
 msgstr "использовать указанный объект заметки"
 
-#: builtin/notes.c:404 builtin/notes.c:567
+#: builtin/notes.c:405 builtin/notes.c:568
 msgid "allow storing empty note"
 msgstr "разрешить сохранение пустой заметки"
 
-#: builtin/notes.c:405 builtin/notes.c:476
+#: builtin/notes.c:406 builtin/notes.c:477
 msgid "replace existing notes"
 msgstr "заменить существующие заметки"
 
-#: builtin/notes.c:430
+#: builtin/notes.c:431
 #, c-format
 msgid ""
 "Cannot add notes. Found existing notes for object %s. Use '-f' to overwrite "
 "existing notes"
 msgstr "Не удалось добавить заметку. Найдена существующая заметка у объекта %s. Используйте параметр «-f» для перезаписи существующих заметок."
 
-#: builtin/notes.c:445 builtin/notes.c:524
+#: builtin/notes.c:446 builtin/notes.c:525
 #, c-format
 msgid "Overwriting existing notes for object %s\n"
 msgstr "Перезапись существующих заметок у объекта %s\n"
 
-#: builtin/notes.c:456 builtin/notes.c:617 builtin/notes.c:859
+#: builtin/notes.c:457 builtin/notes.c:618 builtin/notes.c:882
 #, c-format
 msgid "Removing note for object %s\n"
 msgstr "Удаление заметки у объекта %s\n"
 
-#: builtin/notes.c:477
+#: builtin/notes.c:478
 msgid "read objects from stdin"
 msgstr "прочитать объекты из стандартного ввода"
 
-#: builtin/notes.c:479
+#: builtin/notes.c:480
 msgid "load rewriting config for <command> (implies --stdin)"
 msgstr "загрузить настройки перезаписи для команды <команда> (включает в себя --stdin)"
 
-#: builtin/notes.c:497
+#: builtin/notes.c:498
 msgid "too few parameters"
 msgstr "передано слишком мало параметров"
 
-#: builtin/notes.c:518
+#: builtin/notes.c:519
 #, c-format
 msgid ""
 "Cannot copy notes. Found existing notes for object %s. Use '-f' to overwrite"
 " existing notes"
 msgstr "Не удалось скопировать заметку. Найдена существующая заметка у объекта %s. Используйте параметр «-f» для перезаписи существующих заметок."
 
-#: builtin/notes.c:530
+#: builtin/notes.c:531
 #, c-format
 msgid "Missing notes on source object %s. Cannot copy."
 msgstr "Нет заметок у исходного объекта %s. Нельзя скопировать."
 
-#: builtin/notes.c:582
+#: builtin/notes.c:583
 #, 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 "Опции -m/-F/-c/-C для подкоманды «edit» устарели.\nИспользуйте вместо них «git notes add -f -m/-F/-c/-C».\n"
 
-#: builtin/notes.c:750
+#: builtin/notes.c:764
 msgid "General options"
 msgstr "Общие опции"
 
-#: builtin/notes.c:752
+#: builtin/notes.c:766
 msgid "Merge options"
 msgstr "Опции слияния"
 
-#: builtin/notes.c:754
+#: builtin/notes.c:768
 msgid ""
 "resolve notes conflicts using the given strategy "
 "(manual/ours/theirs/union/cat_sort_uniq)"
 msgstr "разрешить конфликты заметок с помощью указанной стратегии (manual/ours/theirs/union/cat_sort_uniq)"
 
-#: builtin/notes.c:756
+#: builtin/notes.c:770
 msgid "Committing unmerged notes"
 msgstr "Коммит не слитых заметок"
 
-#: builtin/notes.c:758
+#: builtin/notes.c:772
 msgid "finalize notes merge by committing unmerged notes"
 msgstr "завершить слияние заметок коммитом не слитых заметок"
 
-#: builtin/notes.c:760
+#: builtin/notes.c:774
 msgid "Aborting notes merge resolution"
 msgstr "Отмена разрешения слияния заметок"
 
-#: builtin/notes.c:762
+#: builtin/notes.c:776
 msgid "abort notes merge"
 msgstr "отменить слияние заметок"
 
-#: builtin/notes.c:857
+#: builtin/notes.c:853
+#, c-format
+msgid "A notes merge into %s is already in-progress at %s"
+msgstr "Слияние заметок в %s уже выполняется на %s"
+
+#: builtin/notes.c:880
 #, c-format
 msgid "Object %s has no note\n"
 msgstr "У объекта %s нет заметки\n"
 
-#: builtin/notes.c:869
+#: builtin/notes.c:892
 msgid "attempt to remove non-existent note is not an error"
 msgstr "попытка удаления несуществующей заметки не является ошибкой"
 
-#: builtin/notes.c:872
+#: builtin/notes.c:895
 msgid "read object names from the standard input"
 msgstr "прочитать имена объектов из стандартного ввода"
 
-#: builtin/notes.c:953
+#: builtin/notes.c:976
 msgid "notes-ref"
 msgstr "ссылка-на-заметку"
 
-#: builtin/notes.c:954
+#: builtin/notes.c:977
 msgid "use notes from <notes-ref>"
 msgstr "использовать заметку из <ссылка-на-заметку>"
 
-#: builtin/notes.c:989 builtin/remote.c:1618
+#: builtin/notes.c:1012 builtin/remote.c:1588
 #, c-format
 msgid "Unknown subcommand: %s"
 msgstr "Неизвестная подкоманда: %s"
 
 #: builtin/pack-objects.c:28
-msgid "git pack-objects --stdout [options...] [< ref-list | < object-list]"
-msgstr "git pack-objects --stdout [опции…] [< список-ссылок | < список-объектов]"
+msgid ""
+"git pack-objects --stdout [<options>...] [< <ref-list> | < <object-list>]"
+msgstr "git pack-objects --stdout [<опции>…] [< <список-ссылок> | < <список-объектов>]"
 
 #: builtin/pack-objects.c:29
-msgid "git pack-objects [options...] base-name [< ref-list | < object-list]"
-msgstr "git pack-objects [опции…] имя-базы [< список-ссылок | < список-объектов]"
+msgid ""
+"git pack-objects [<options>...] <base-name> [< <ref-list> | < <object-list>]"
+msgstr "git pack-objects [<опции>…] <имя-базы> [< <список-ссылок> | < <список-объектов>]"
 
 #: builtin/pack-objects.c:175 builtin/pack-objects.c:178
 #, c-format
@@ -7671,153 +8097,143 @@ msgstr "неподдерживаемая версия индекса %s"
 msgid "bad index version '%s'"
 msgstr "плохая версия индекса «%s»"
 
-#: builtin/pack-objects.c:2595
-#, c-format
-msgid "option %s does not accept negative form"
-msgstr "опция %s не принимает отрицательные значения"
-
-#: builtin/pack-objects.c:2599
-#, c-format
-msgid "unable to parse value '%s' for option %s"
-msgstr "не удалось разобрать значение «%s» для опции %s"
-
-#: builtin/pack-objects.c:2619
+#: builtin/pack-objects.c:2602
 msgid "do not show progress meter"
 msgstr "не выводить прогресс выполнения"
 
-#: builtin/pack-objects.c:2621
+#: builtin/pack-objects.c:2604
 msgid "show progress meter"
 msgstr "показать прогресс выполнения"
 
-#: builtin/pack-objects.c:2623
+#: builtin/pack-objects.c:2606
 msgid "show progress meter during object writing phase"
 msgstr "показать прогресс выполнения во время записи объектов"
 
-#: builtin/pack-objects.c:2626
+#: builtin/pack-objects.c:2609
 msgid "similar to --all-progress when progress meter is shown"
 msgstr "похоже на --all-progress при включенном прогрессе выполнения"
 
-#: builtin/pack-objects.c:2627
+#: builtin/pack-objects.c:2610
 msgid "version[,offset]"
 msgstr "версия[,смещение]"
 
-#: builtin/pack-objects.c:2628
+#: builtin/pack-objects.c:2611
 msgid "write the pack index file in the specified idx format version"
 msgstr "записать файл индекса пакета в указанной версии формата"
 
-#: builtin/pack-objects.c:2631
+#: builtin/pack-objects.c:2614
 msgid "maximum size of each output pack file"
 msgstr "максимальный размер каждого выходного файла пакета"
 
-#: builtin/pack-objects.c:2633
+#: builtin/pack-objects.c:2616
 msgid "ignore borrowed objects from alternate object store"
 msgstr "игнорировать чужие объекты, взятые из альтернативного хранилища объектов"
 
-#: builtin/pack-objects.c:2635
+#: builtin/pack-objects.c:2618
 msgid "ignore packed objects"
 msgstr "игнорировать упакованные объекты"
 
-#: builtin/pack-objects.c:2637
+#: builtin/pack-objects.c:2620
 msgid "limit pack window by objects"
 msgstr "ограничить окно пакета по количеству объектов"
 
-#: builtin/pack-objects.c:2639
+#: builtin/pack-objects.c:2622
 msgid "limit pack window by memory in addition to object limit"
 msgstr "дополнительно к количеству объектов ограничить окно пакета по памяти"
 
-#: builtin/pack-objects.c:2641
+#: builtin/pack-objects.c:2624
 msgid "maximum length of delta chain allowed in the resulting pack"
 msgstr "максимальная разрешенная длина цепочки дельт в результирующем пакете"
 
-#: builtin/pack-objects.c:2643
+#: builtin/pack-objects.c:2626
 msgid "reuse existing deltas"
 msgstr "использовать повторно существующие дельты"
 
-#: builtin/pack-objects.c:2645
+#: builtin/pack-objects.c:2628
 msgid "reuse existing objects"
 msgstr "использовать повторно существующие объекты"
 
-#: builtin/pack-objects.c:2647
+#: builtin/pack-objects.c:2630
 msgid "use OFS_DELTA objects"
 msgstr "использовать объекты OFS_DELTA"
 
-#: builtin/pack-objects.c:2649
+#: builtin/pack-objects.c:2632
 msgid "use threads when searching for best delta matches"
 msgstr "использовать многопоточность при поиске лучших совпадений дельт"
 
-#: builtin/pack-objects.c:2651
+#: builtin/pack-objects.c:2634
 msgid "do not create an empty pack output"
 msgstr "не создавать пустые выходные пакеты"
 
-#: builtin/pack-objects.c:2653
+#: builtin/pack-objects.c:2636
 msgid "read revision arguments from standard input"
 msgstr "прочитать аргументы редакций из стандартного ввода"
 
-#: builtin/pack-objects.c:2655
+#: builtin/pack-objects.c:2638
 msgid "limit the objects to those that are not yet packed"
 msgstr "ограничиться объектами, которые еще не упакованы"
 
-#: builtin/pack-objects.c:2658
+#: builtin/pack-objects.c:2641
 msgid "include objects reachable from any reference"
 msgstr "включить объекты, которые достижимы по любой из ссылок"
 
-#: builtin/pack-objects.c:2661
+#: builtin/pack-objects.c:2644
 msgid "include objects referred by reflog entries"
 msgstr "включить объекты, на которые ссылаются записи журнала ссылок"
 
-#: builtin/pack-objects.c:2664
+#: builtin/pack-objects.c:2647
 msgid "include objects referred to by the index"
 msgstr "включить объекты, на которые ссылается индекс"
 
-#: builtin/pack-objects.c:2667
+#: builtin/pack-objects.c:2650
 msgid "output pack to stdout"
 msgstr "вывести пакет на  стандартный вывод"
 
-#: builtin/pack-objects.c:2669
+#: builtin/pack-objects.c:2652
 msgid "include tag objects that refer to objects to be packed"
 msgstr "включить объекты меток, которые ссылаются на упаковываемые объекты"
 
-#: builtin/pack-objects.c:2671
+#: builtin/pack-objects.c:2654
 msgid "keep unreachable objects"
 msgstr "сохранять ссылки на недоступные объекты"
 
-#: builtin/pack-objects.c:2672 parse-options.h:139
+#: builtin/pack-objects.c:2655 parse-options.h:142
 msgid "time"
 msgstr "время"
 
-#: builtin/pack-objects.c:2673
+#: builtin/pack-objects.c:2656
 msgid "unpack unreachable objects newer than <time>"
 msgstr "распаковать недоступные объекты, которые новее, чем <время>"
 
-#: builtin/pack-objects.c:2676
+#: builtin/pack-objects.c:2659
 msgid "create thin packs"
 msgstr "создавать тонкие пакеты"
 
-#: builtin/pack-objects.c:2678
+#: builtin/pack-objects.c:2661
 msgid "create packs suitable for shallow fetches"
 msgstr "создавать пакеты, подходящие для частичных извлечений"
 
-#: builtin/pack-objects.c:2680
+#: builtin/pack-objects.c:2663
 msgid "ignore packs that have companion .keep file"
 msgstr "игнорировать пакеты, рядом с которыми лежит .keep файл"
 
-#: builtin/pack-objects.c:2682
+#: builtin/pack-objects.c:2665
 msgid "pack compression level"
 msgstr "уровень сжатия пакета"
 
-#: builtin/pack-objects.c:2684
+#: builtin/pack-objects.c:2667
 msgid "do not hide commits by grafts"
 msgstr "не скрывать коммиты сращениями"
 
-#: builtin/pack-objects.c:2686
+#: builtin/pack-objects.c:2669
 msgid "use a bitmap index if available to speed up counting objects"
 msgstr "по возможности использовать индекс в битовых картах, для ускорения подсчета объектов"
 
-#: builtin/pack-objects.c:2688
+#: builtin/pack-objects.c:2671
 msgid "write a bitmap index together with the pack index"
 msgstr "запись индекса в битовых картах вместе с индексом пакета"
 
-#: builtin/pack-objects.c:2779
+#: builtin/pack-objects.c:2762
 msgid "Counting objects"
 msgstr "Подсчет объектов"
 
@@ -7845,37 +8261,169 @@ msgstr "Удаление дублирующихся объектов"
 msgid "git prune [-n] [-v] [--expire <time>] [--] [<head>...]"
 msgstr "git prune [-n] [-v] [--expire <время>] [--] [<имя-ветки>…]"
 
-#: builtin/prune.c:105 builtin/worktree.c:112
+#: builtin/prune.c:105 builtin/worktree.c:121
 msgid "do not remove, show only"
 msgstr "не удалять, только показать список"
 
-#: builtin/prune.c:106 builtin/worktree.c:113
+#: builtin/prune.c:106 builtin/worktree.c:122
 msgid "report pruned objects"
 msgstr "вывести список удаленных объектов"
 
-#: builtin/prune.c:109 builtin/worktree.c:115
+#: builtin/prune.c:109 builtin/worktree.c:124
 msgid "expire objects older than <time>"
 msgstr "удалить объекты старее чем <дата-окончания>"
 
-#: builtin/push.c:14
+#: builtin/pull.c:69
+msgid "git pull [options] [<repository> [<refspec>...]]"
+msgstr "git pull [опции] [<репозиторий> [<спецификация-ссылки>…]]"
+
+#: builtin/pull.c:113
+msgid "Options related to merging"
+msgstr "Опции, связанные со слиянием"
+
+#: builtin/pull.c:116
+msgid "incorporate changes by rebasing rather than merging"
+msgstr "забрать изменения с помощью перебазирования, а не слияния"
+
+#: builtin/pull.c:140 builtin/revert.c:105
+msgid "allow fast-forward"
+msgstr "разрешить перемотку вперед"
+
+#: builtin/pull.c:146
+msgid "verify that the named commit has a valid GPG signature"
+msgstr "проверить, что указанный коммит имеет верную электронную подпись GPG"
+
+#: builtin/pull.c:160
+msgid "Options related to fetching"
+msgstr "Опции, связанные с извлечением"
+
+#: builtin/pull.c:268
+#, c-format
+msgid "Invalid value for pull.ff: %s"
+msgstr "Неправильное значение для pull.ff: %s"
+
+#: builtin/pull.c:352
+msgid "Cannot pull with rebase: You have unstaged changes."
+msgstr "Не удалось получить с перемещением: У вас есть непроиндексированные изменения."
+
+#: builtin/pull.c:358
+msgid "Additionally, your index contains uncommitted changes."
+msgstr "К тому же, в вашем индексе есть незакоммиченные изменения."
+
+#: builtin/pull.c:360
+msgid "Cannot pull with rebase: Your index contains uncommitted changes."
+msgstr "Не удалось получить с перемещением: В вашем индексе есть незакоммиченные изменения."
+
+#: builtin/pull.c:436
+msgid ""
+"There is no candidate for rebasing against among the refs that you just "
+"fetched."
+msgstr "Нет претендентов для перемещения среди ссылок, которые вы только что получили."
+
+#: builtin/pull.c:438
+msgid ""
+"There are no candidates for merging among the refs that you just fetched."
+msgstr "Нет претендентов для слияния среди ссылок, которые вы только что получили."
+
+#: builtin/pull.c:439
+msgid ""
+"Generally this means that you provided a wildcard refspec which had no\n"
+"matches on the remote end."
+msgstr "Обычно это означает, что вы передали спецификацию ссылки с помощью шаблона и этот шаблон не совпал ни с одной из ссылок на внешнем репозитории."
+
+#: builtin/pull.c:442
+#, 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», но не указали ветку. Так как это не репозиторий по умолчанию для  вашей текущей ветки, вы должны указать ветку в командной строке."
+
+#: builtin/pull.c:447
+msgid "You are not currently on a branch."
+msgstr "Вы сейчас ни на одной из веток."
+
+#: builtin/pull.c:449 builtin/pull.c:464
+msgid "Please specify which branch you want to rebase against."
+msgstr "Пожалуйста, укажите на какую ветку вы хотите переместить изменения."
+
+#: builtin/pull.c:451 builtin/pull.c:466
+msgid "Please specify which branch you want to merge with."
+msgstr "Пожалуйста, укажите с какой веткой вы хотите слить изменения."
+
+#: builtin/pull.c:452 builtin/pull.c:467
+msgid "See git-pull(1) for details."
+msgstr "Для дополнительной информации смотрите git-pull(1)."
+
+#: builtin/pull.c:462
+msgid "There is no tracking information for the current branch."
+msgstr "У текущей ветки нет информации об отслеживании."
+
+#: builtin/pull.c:471
+#, 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"
+msgstr "Если вы хотите указать информацию о отслеживаемой ветке, выполните:\n\n    git branch --set-upstream-to=%s/<branch> %s\n"
+
+#: builtin/pull.c:476
+#, 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:830
+msgid "Updating an unborn branch with changes added to the index."
+msgstr "Обновление еще не начавшейся ветки с изменениями, добавленными в индекс."
+
+#: builtin/pull.c:859
+#, c-format
+msgid ""
+"fetch updated the current branch head.\n"
+"fast-forwarding your working tree from\n"
+"commit %s."
+msgstr "извлечение обновило голову вашей текущей ветки.\nперемотка вашего рабочего каталога\nс коммита %s."
+
+#: builtin/pull.c:864
+#, 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 "Не удалось перемотать вперёд изменения в вашем рабочем каталоге.\nПосле того, как вы убедитесь, что вы сохранили всё необходимое из вывода\n$ git diff %s\n, запустите\n$ git reset --hard\nдля восстановления исходного состояния."
+
+#: builtin/pull.c:879
+msgid "Cannot merge multiple branches into empty head."
+msgstr "Нельзя слить несколько веток в пустой указатель на коммит."
+
+#: builtin/pull.c:883
+msgid "Cannot rebase onto multiple branches."
+msgstr "Невозможно переместить над несколькими ветками."
+
+#: builtin/push.c:15
 msgid "git push [<options>] [<repository> [<refspec>...]]"
 msgstr "git push [<опции>] [<репозиторий> [<спецификация-ссылки>…]]"
 
-#: builtin/push.c:85
+#: builtin/push.c:86
 msgid "tag shorthand without <tag>"
 msgstr "указано сокращение tag, но не указана сама <метка>"
 
-#: builtin/push.c:95
+#: builtin/push.c:96
 msgid "--delete only accepts plain target ref names"
 msgstr "опция --delete принимает только простые целевые имена ссылок"
 
-#: builtin/push.c:139
+#: builtin/push.c:140
 msgid ""
 "\n"
 "To choose either option permanently, see push.default in 'git help config'."
 msgstr "\nЧтобы выбрать любую из опций на постоянной основе, смотрите push.default в «git help config»."
 
-#: builtin/push.c:142
+#: builtin/push.c:143
 #, c-format
 msgid ""
 "The upstream branch of your current branch does not match\n"
@@ -7890,7 +8438,7 @@ msgid ""
 "%s"
 msgstr "Имя вышестоящей ветки и вашей текущей ветки различаются. Чтобы отправить изменения в вышестоящую ветку на внешнем репозитории, используйте:\n\n    git push %s HEAD:%s\n\nЧтобы отправить изменения в ветку с таким же именем на внешнем репозитории, используйте:\n\n    git push %s %s\n%s"
 
-#: builtin/push.c:157
+#: builtin/push.c:158
 #, c-format
 msgid ""
 "You are not currently on a branch.\n"
@@ -7900,7 +8448,7 @@ msgid ""
 "    git push %s HEAD:<name-of-remote-branch>\n"
 msgstr "Вы сейчас не находитесь ни на одной из веток.\nЧтобы отправить историю, ведущую к текущему (отделенный HEAD) состоянию, используйте\n\n    git push %s HEAD:<имя-внешней-ветки>\n"
 
-#: builtin/push.c:171
+#: builtin/push.c:172
 #, c-format
 msgid ""
 "The current branch %s has no upstream branch.\n"
@@ -7909,13 +8457,13 @@ msgid ""
 "    git push --set-upstream %s %s\n"
 msgstr "Текущая ветка %s не имеет вышестоящей ветки.\nЧтобы отправить текущую ветку и установить внешнюю ветку как вышестоящую для этой ветки, используйте\n\n    git push --set-upstream %s %s\n"
 
-#: builtin/push.c:179
+#: builtin/push.c:180
 #, c-format
 msgid ""
 "The current branch %s has multiple upstream branches, refusing to push."
 msgstr "Ваша текущая ветка %s имеет несколько вышестоящих веток, отказ в отправке изменений."
 
-#: builtin/push.c:182
+#: builtin/push.c:183
 #, c-format
 msgid ""
 "You are pushing to remote '%s', which is not the upstream of\n"
@@ -7923,7 +8471,7 @@ msgid ""
 "to update which remote branch."
 msgstr "Вы сейчас отправляете изменения на внешний репозиторий «%s», который не является вышестоящим для вашей текущей ветки «%s», без указания того, что отправлять и в какую внешнюю ветку."
 
-#: builtin/push.c:205
+#: builtin/push.c:206
 msgid ""
 "push.default is unset; its implicit value has changed in\n"
 "Git 2.0 from 'matching' to 'simple'. To squelch this message\n"
@@ -7947,11 +8495,11 @@ msgid ""
 "'current' instead of 'simple' if you sometimes use older versions of Git)"
 msgstr "push.default не установлен; его неявное значение было изменено в Git версии 2.0 с «matching» на «simple». Чтобы прекратить вывод этого сообщения и сохранить старое поведение, используйте:\n\n  git config --global push.default matching\n\nЧтобы прекратить вывод этого сообщения и использовать новое поведение, используйте:\n\n  git config --global push.default simple\n\nКогда push.default установлено в «matching», git будет отправлять изменения локальных веток в существующие внешние ветки с таким же именем.\n\nНачиная с Git версии 2.0, по умолчанию используется более консервативное поведение «simple», которое отправляет изменения текущей ветки в соответствующую внешнюю ветку, из которой «git pull» забирает изменения.\n\nСмотрите «git help config» и ищите «push.default» для дополнительной информации.\n(режим «simple» появился в Git версии 1.7.11. Используйте похожий режим «current» вместо «simple», если вы иногда используете старые версии Git)"
 
-#: builtin/push.c:272
+#: builtin/push.c:273
 msgid "You didn't specify any refspecs to push, and push.default is \"nothing\"."
 msgstr "Вы не указали спецификацию ссылки для отправки, а push.default указан как \"nothing\"."
 
-#: builtin/push.c:279
+#: builtin/push.c:280
 msgid ""
 "Updates were rejected because the tip of your current branch is behind\n"
 "its remote counterpart. Integrate the remote changes (e.g.\n"
@@ -7959,7 +8507,7 @@ msgid ""
 "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:285
+#: builtin/push.c:286
 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"
@@ -7967,7 +8515,7 @@ msgid ""
 "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:291
+#: builtin/push.c:292
 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"
@@ -7976,33 +8524,33 @@ msgid ""
 "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:298
+#: builtin/push.c:299
 msgid "Updates were rejected because the tag already exists in the remote."
 msgstr "Обновления были отклонены, так как метка уже существует во внешнем репозитории."
 
-#: builtin/push.c:301
+#: builtin/push.c:302
 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:360
+#: builtin/push.c:361
 #, c-format
 msgid "Pushing to %s\n"
 msgstr "Отправка в %s\n"
 
-#: builtin/push.c:364
+#: builtin/push.c:365
 #, c-format
 msgid "failed to push some refs to '%s'"
 msgstr "не удалось отправить некоторые ссылки в «%s»"
 
-#: builtin/push.c:394
+#: builtin/push.c:395
 #, c-format
 msgid "bad repository '%s'"
 msgstr "плохой репозитория «%s»"
 
-#: builtin/push.c:395
+#: builtin/push.c:396
 msgid ""
 "No configured push destination.\n"
 "Either specify the URL from the command-line or configure a remote repository using\n"
@@ -8014,108 +8562,109 @@ msgid ""
 "    git push <name>\n"
 msgstr "Не настроена точка назначения для отправки.\nЛибо укажите URL с помощью коммандной строки, либо настройте внешний репозиторий с помощью\n\n    git remote add <имя> <адрес>\n\nа затем отправьте изменения с помощью имени внешнего репозитория\n\n    git push <имя>\n"
 
-#: builtin/push.c:410
+#: builtin/push.c:411
 msgid "--all and --tags are incompatible"
 msgstr "--all и --tags нельзя использовать одновременно"
 
-#: builtin/push.c:411
+#: builtin/push.c:412
 msgid "--all can't be combined with refspecs"
 msgstr "--all нельзя использовать вместе со спецификациями ссылок"
 
-#: builtin/push.c:416
+#: builtin/push.c:417
 msgid "--mirror and --tags are incompatible"
 msgstr "--mirror и --tags нельзя использовать одновременно"
 
-#: builtin/push.c:417
+#: builtin/push.c:418
 msgid "--mirror can't be combined with refspecs"
 msgstr "--mirror нельзя использовать вместе со спецификациями ссылок"
 
-#: builtin/push.c:422
+#: builtin/push.c:423
 msgid "--all and --mirror are incompatible"
 msgstr "--all и --mirror нельзя использовать одновременно"
 
-#: builtin/push.c:502
+#: builtin/push.c:539
 msgid "repository"
 msgstr "репозиторий"
 
-#: builtin/push.c:503
+#: builtin/push.c:540 builtin/send-pack.c:161
 msgid "push all refs"
 msgstr "отправить все ссылки"
 
-#: builtin/push.c:504
+#: builtin/push.c:541 builtin/send-pack.c:163
 msgid "mirror all refs"
 msgstr "сделать зеркало всех ссылок"
 
-#: builtin/push.c:506
+#: builtin/push.c:543
 msgid "delete refs"
 msgstr "удалить ссылки"
 
-#: builtin/push.c:507
+#: builtin/push.c:544
 msgid "push tags (can't be used with --all or --mirror)"
 msgstr "отправить метки (нельзя использовать вместе с --all или --mirror)"
 
-#: builtin/push.c:510
+#: builtin/push.c:547 builtin/send-pack.c:164
 msgid "force updates"
 msgstr "принудительное обновление"
 
-#: builtin/push.c:512
+#: builtin/push.c:549 builtin/send-pack.c:175
 msgid "refname>:<expect"
 msgstr "имя-ссылки>:<ожидается"
 
-#: builtin/push.c:513
+#: builtin/push.c:550 builtin/send-pack.c:176
 msgid "require old value of ref to be at this value"
 msgstr "требовать, чтобы старое значение ссылки было ожидаемым"
 
-#: builtin/push.c:516
+#: builtin/push.c:553
 msgid "control recursive pushing of submodules"
 msgstr "управление рекурсивной отправкой подмодулей"
 
-#: builtin/push.c:518
+#: builtin/push.c:555 builtin/send-pack.c:169
 msgid "use thin pack"
 msgstr "использовать тонкие пакеты"
 
-#: builtin/push.c:519 builtin/push.c:520
+#: builtin/push.c:556 builtin/push.c:557 builtin/send-pack.c:158
+#: builtin/send-pack.c:159
 msgid "receive pack program"
 msgstr "путь к программе упаковки на сервере"
 
-#: builtin/push.c:521
+#: builtin/push.c:558
 msgid "set upstream for git pull/status"
 msgstr "установить вышестоящую ветку для git pull/status"
 
-#: builtin/push.c:524
+#: builtin/push.c:561
 msgid "prune locally removed refs"
 msgstr "почистить локально удаленные ссылки"
 
-#: builtin/push.c:526
+#: builtin/push.c:563
 msgid "bypass pre-push hook"
 msgstr "пропустить перехватчик перед-отправкой"
 
-#: builtin/push.c:527
+#: builtin/push.c:564
 msgid "push missing but relevant tags"
 msgstr "отправить пропущенные, но нужные метки"
 
-#: builtin/push.c:529
+#: builtin/push.c:567 builtin/send-pack.c:166
 msgid "GPG sign the push"
 msgstr "подписать отправку с помощью GPG"
 
-#: builtin/push.c:530
+#: builtin/push.c:569 builtin/send-pack.c:170
 msgid "request atomic transaction on remote side"
 msgstr "запросить выполнение атомарной транзакции на внешней стороне"
 
-#: builtin/push.c:539
+#: builtin/push.c:579
 msgid "--delete is incompatible with --all, --mirror and --tags"
 msgstr "--delete несовместимо с  --all, --mirror и --tags"
 
-#: builtin/push.c:541
+#: builtin/push.c:581
 msgid "--delete doesn't make sense without any refs"
 msgstr "--delete не имеет смысла без указания ссылок"
 
 #: builtin/read-tree.c:37
 msgid ""
-"git read-tree [[-m [--trivial] [--aggressive] | --reset | --prefix=<prefix>]"
+"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=<префикс>] [-u [--exclude-per-directory=<gitignore>] | -i]] [--no-sparse-checkout] [--index-output=<файл>] (--empty | <указатель-дерева-1> [<указатель-дерева-2> [<указатель-дерева-3>]])"
+msgstr "git read-tree [(-m [--trivial] [--aggressive] | --reset | --prefix=<префикс>) [-u [--exclude-per-directory=<gitignore>] | -i]] [--no-sparse-checkout] [--index-output=<файл>] (--empty | <указатель-дерева-1> [<указатель-дерева-2> [<указатель-дерева-3>]])"
 
 #: builtin/read-tree.c:110
 msgid "write resulting index to <file>"
@@ -8181,12 +8730,12 @@ msgstr "пропустить применение фильтра частичн
 msgid "debug unpack-trees"
 msgstr "отладка unpack-trees"
 
-#: builtin/reflog.c:430
+#: builtin/reflog.c:432
 #, c-format
-msgid "%s' for '%s' is not a valid timestamp"
+msgid "'%s' for '%s' is not a valid timestamp"
 msgstr "«%s» для «%s» не является допустимой меткой даты/времени"
 
-#: builtin/reflog.c:547 builtin/reflog.c:552
+#: builtin/reflog.c:549 builtin/reflog.c:554
 #, c-format
 msgid "'%s' is not a valid timestamp"
 msgstr "«%s» не является допустимой меткой даты/времени"
@@ -8318,12 +8867,12 @@ msgstr "указание мастер ветки не имеет смысла с
 msgid "specifying branches to track makes sense only with fetch mirrors"
 msgstr "указание отслеживаемых веток имеет смысл только при зеркальном извлечении"
 
-#: builtin/remote.c:187 builtin/remote.c:640
+#: builtin/remote.c:187 builtin/remote.c:637
 #, c-format
 msgid "remote %s already exists."
 msgstr "внешний репозиторий %s уже существует"
 
-#: builtin/remote.c:191 builtin/remote.c:644
+#: builtin/remote.c:191 builtin/remote.c:641
 #, c-format
 msgid "'%s' is not a valid remote name"
 msgstr "«%s» не является допустимым именем внешнего репозитория."
@@ -8346,27 +8895,27 @@ msgstr "(соответствующая)"
 msgid "(delete)"
 msgstr "(удаленная)"
 
-#: builtin/remote.c:589 builtin/remote.c:595 builtin/remote.c:601
+#: builtin/remote.c:588 builtin/remote.c:594 builtin/remote.c:600
 #, c-format
 msgid "Could not append '%s' to '%s'"
 msgstr "Не удалось добавить «%s» к «%s»"
 
-#: builtin/remote.c:633 builtin/remote.c:792 builtin/remote.c:892
+#: builtin/remote.c:630 builtin/remote.c:769 builtin/remote.c:869
 #, c-format
 msgid "No such remote: %s"
 msgstr "Нет такого внешнего репозитория: %s"
 
-#: builtin/remote.c:650
+#: builtin/remote.c:647
 #, c-format
 msgid "Could not rename config section '%s' to '%s'"
 msgstr "Не удалось переименовать секцию конфигурации с «%s» на «%s»"
 
-#: builtin/remote.c:656 builtin/remote.c:844
+#: builtin/remote.c:653 builtin/remote.c:821
 #, c-format
 msgid "Could not remove config section '%s'"
 msgstr "Не удалось удалить секцию файла конфигурации «%s»"
 
-#: builtin/remote.c:671
+#: builtin/remote.c:668
 #, c-format
 msgid ""
 "Not updating non-default fetch refspec\n"
@@ -8374,32 +8923,27 @@ msgid ""
 "\tPlease update the configuration manually if necessary."
 msgstr "Не обновляю нестандартную спецификацию ссылки для извлечения\n\t%s\n\tПожалуйста, если требуется, обновите конфигурацию вручную."
 
-#: builtin/remote.c:677
+#: builtin/remote.c:674
 #, c-format
 msgid "Could not append '%s'"
 msgstr "Не удалось добавить «%s»"
 
-#: builtin/remote.c:688
+#: builtin/remote.c:685
 #, c-format
 msgid "Could not set '%s'"
 msgstr "Не удалось установить «%s»"
 
-#: builtin/remote.c:710
+#: builtin/remote.c:707
 #, c-format
 msgid "deleting '%s' failed"
 msgstr "не удалось удалить «%s»"
 
-#: builtin/remote.c:744
+#: builtin/remote.c:741
 #, c-format
 msgid "creating '%s' failed"
 msgstr "не удалось создать «%s»"
 
-#: builtin/remote.c:763
-#, c-format
-msgid "Could not remove branch %s"
-msgstr "Не удалось удалить ветку «%s»"
-
-#: builtin/remote.c:830
+#: builtin/remote.c:807
 msgid ""
 "Note: A branch outside the refs/remotes/ hierarchy was not removed;\n"
 "to delete it, use:"
@@ -8411,125 +8955,125 @@ msgstr[1] "Примечание: Некоторые ветки вне иерар
 msgstr[2] "Примечание: Некоторые ветки вне иерархии refs/remotes/ не будут удалены;\nчтобы удалить их, используйте:"
 msgstr[3] "Примечание: Некоторые ветки вне иерархии refs/remotes/ не будут удалены;\nчтобы удалить их, используйте:"
 
-#: builtin/remote.c:945
+#: builtin/remote.c:922
 #, c-format
 msgid " new (next fetch will store in remotes/%s)"
 msgstr " новая (следующее извлечение сохранит ее в remotes/%s)"
 
-#: builtin/remote.c:948
+#: builtin/remote.c:925
 msgid " tracked"
 msgstr " отслеживается"
 
-#: builtin/remote.c:950
+#: builtin/remote.c:927
 msgid " stale (use 'git remote prune' to remove)"
 msgstr " недействительна (используйте «git remote prune», чтобы удалить)"
 
-#: builtin/remote.c:952
+#: builtin/remote.c:929
 msgid " ???"
 msgstr " ???"
 
-#: builtin/remote.c:993
+#: builtin/remote.c:970
 #, c-format
 msgid "invalid branch.%s.merge; cannot rebase onto > 1 branch"
 msgstr "неправильный параметр конфигурации branch.%s.merge; невозможно переместить более чем над 1 веткой"
 
-#: builtin/remote.c:1000
+#: builtin/remote.c:977
 #, c-format
 msgid "rebases onto remote %s"
 msgstr "будет перемещена над внешней веткой %s"
 
-#: builtin/remote.c:1003
+#: builtin/remote.c:980
 #, c-format
 msgid " merges with remote %s"
 msgstr " будет слита с внешней веткой %s"
 
-#: builtin/remote.c:1004
+#: builtin/remote.c:981
 msgid "    and with remote"
 msgstr "    и с внешней веткой"
 
-#: builtin/remote.c:1006
+#: builtin/remote.c:983
 #, c-format
 msgid "merges with remote %s"
 msgstr "будет слита с внешней веткой %s"
 
-#: builtin/remote.c:1007
+#: builtin/remote.c:984
 msgid "   and with remote"
 msgstr "   и с внешней веткой"
 
-#: builtin/remote.c:1053
+#: builtin/remote.c:1030
 msgid "create"
 msgstr "создана"
 
-#: builtin/remote.c:1056
+#: builtin/remote.c:1033
 msgid "delete"
 msgstr "удалена"
 
-#: builtin/remote.c:1060
+#: builtin/remote.c:1037
 msgid "up to date"
 msgstr "уже актуальна"
 
-#: builtin/remote.c:1063
+#: builtin/remote.c:1040
 msgid "fast-forwardable"
 msgstr "возможна перемотка вперед"
 
-#: builtin/remote.c:1066
+#: builtin/remote.c:1043
 msgid "local out of date"
 msgstr "локальная ветка устарела"
 
-#: builtin/remote.c:1073
+#: builtin/remote.c:1050
 #, c-format
 msgid "    %-*s forces to %-*s (%s)"
 msgstr "    %-*s будет принудительно отправлена в %-*s (%s)"
 
-#: builtin/remote.c:1076
+#: builtin/remote.c:1053
 #, c-format
 msgid "    %-*s pushes to %-*s (%s)"
 msgstr "    %-*s будет отправлена в %-*s (%s)"
 
-#: builtin/remote.c:1080
+#: builtin/remote.c:1057
 #, c-format
 msgid "    %-*s forces to %s"
 msgstr "    %-*s будет принудительно отправлена в %s"
 
-#: builtin/remote.c:1083
+#: builtin/remote.c:1060
 #, c-format
 msgid "    %-*s pushes to %s"
 msgstr "    %-*s будет отправлена в %s"
 
-#: builtin/remote.c:1151
+#: builtin/remote.c:1128
 msgid "do not query remotes"
 msgstr "не опрашивать внешние репозитории"
 
-#: builtin/remote.c:1178
+#: builtin/remote.c:1155
 #, c-format
 msgid "* remote %s"
 msgstr "* внешний репозиторий %s"
 
-#: builtin/remote.c:1179
+#: builtin/remote.c:1156
 #, c-format
 msgid "  Fetch URL: %s"
 msgstr "  URL для извлечения: %s"
 
-#: builtin/remote.c:1180 builtin/remote.c:1331
+#: builtin/remote.c:1157 builtin/remote.c:1308
 msgid "(no URL)"
 msgstr "(нет URL)"
 
-#: builtin/remote.c:1189 builtin/remote.c:1191
+#: builtin/remote.c:1166 builtin/remote.c:1168
 #, c-format
 msgid "  Push  URL: %s"
 msgstr "  URL для отправки: %s"
 
-#: builtin/remote.c:1193 builtin/remote.c:1195 builtin/remote.c:1197
+#: builtin/remote.c:1170 builtin/remote.c:1172 builtin/remote.c:1174
 #, c-format
 msgid "  HEAD branch: %s"
 msgstr "  HEAD ветка: %s"
 
-#: builtin/remote.c:1199
+#: builtin/remote.c:1176
 #, c-format
 msgid "  HEAD branch (remote HEAD is ambiguous, may be one of the following):\n"
 msgstr "  HEAD ветка (HEAD внешнего репозитория неоднозначный, может быть одним из):\n"
 
-#: builtin/remote.c:1211
+#: builtin/remote.c:1188
 #, c-format
 msgid "  Remote branch:%s"
 msgid_plural "  Remote branches:%s"
@@ -8538,11 +9082,11 @@ msgstr[1] "    Внешние ветки:%s"
 msgstr[2] "    Внешние ветки:%s"
 msgstr[3] "    Внешние ветки:%s"
 
-#: builtin/remote.c:1214 builtin/remote.c:1241
+#: builtin/remote.c:1191 builtin/remote.c:1218
 msgid " (status not queried)"
 msgstr " (статус не запрошен)"
 
-#: builtin/remote.c:1223
+#: builtin/remote.c:1200
 msgid "  Local branch configured for 'git pull':"
 msgid_plural "  Local branches configured for 'git pull':"
 msgstr[0] "  Локальная ветка, настроенная для «git pull»:"
@@ -8550,11 +9094,11 @@ msgstr[1] "  Локальные ветки, настроенные для «git
 msgstr[2] "  Локальные ветки, настроенные для «git pull»:"
 msgstr[3] "  Локальные ветки, настроенные для «git pull»:"
 
-#: builtin/remote.c:1231
+#: builtin/remote.c:1208
 msgid "  Local refs will be mirrored by 'git push'"
 msgstr " Локальные ссылки, зеркалируемые с помощью «git push»"
 
-#: builtin/remote.c:1238
+#: builtin/remote.c:1215
 #, c-format
 msgid "  Local ref configured for 'git push'%s:"
 msgid_plural "  Local refs configured for 'git push'%s:"
@@ -8563,115 +9107,115 @@ msgstr[1] "  Локальные ссылки, настроенные для «gi
 msgstr[2] "  Локальные ссылки, настроенные для «git push»%s:"
 msgstr[3] "  Локальные ссылки, настроенные для «git push»%s:"
 
-#: builtin/remote.c:1259
+#: builtin/remote.c:1236
 msgid "set refs/remotes/<name>/HEAD according to remote"
 msgstr "установить refs/remotes/<имя>/HEAD в зависимости от внешнего репозитория"
 
-#: builtin/remote.c:1261
+#: builtin/remote.c:1238
 msgid "delete refs/remotes/<name>/HEAD"
 msgstr "удалить refs/remotes/<имя>/HEAD"
 
-#: builtin/remote.c:1276
+#: builtin/remote.c:1253
 msgid "Cannot determine remote HEAD"
 msgstr "Не удалось определить внешний HEAD"
 
-#: builtin/remote.c:1278
+#: builtin/remote.c:1255
 msgid "Multiple remote HEAD branches. Please choose one explicitly with:"
 msgstr "Несколько внешних HEAD веток. Укажите явно одну из них:"
 
-#: builtin/remote.c:1288
+#: builtin/remote.c:1265
 #, c-format
 msgid "Could not delete %s"
 msgstr "Не удалось удалить %s"
 
-#: builtin/remote.c:1296
+#: builtin/remote.c:1273
 #, c-format
 msgid "Not a valid ref: %s"
 msgstr "Неправильная ссылка: %s"
 
-#: builtin/remote.c:1298
+#: builtin/remote.c:1275
 #, c-format
 msgid "Could not setup %s"
 msgstr "Не удалось настроить %s"
 
-#: builtin/remote.c:1316
+#: builtin/remote.c:1293
 #, c-format
 msgid " %s will become dangling!"
 msgstr " %s будет висящей веткой!"
 
-#: builtin/remote.c:1317
+#: builtin/remote.c:1294
 #, c-format
 msgid " %s has become dangling!"
 msgstr " %s стала висящей веткой!"
 
-#: builtin/remote.c:1327
+#: builtin/remote.c:1304
 #, c-format
 msgid "Pruning %s"
 msgstr "Удаление %s"
 
-#: builtin/remote.c:1328
+#: builtin/remote.c:1305
 #, c-format
 msgid "URL: %s"
 msgstr "URL: %s"
 
-#: builtin/remote.c:1351
+#: builtin/remote.c:1321
 #, c-format
 msgid " * [would prune] %s"
 msgstr " * [будет удалена] %s"
 
-#: builtin/remote.c:1354
+#: builtin/remote.c:1324
 #, c-format
 msgid " * [pruned] %s"
 msgstr " * [удалена] %s"
 
-#: builtin/remote.c:1399
+#: builtin/remote.c:1369
 msgid "prune remotes after fetching"
 msgstr "почистить внешние репозитории после извлечения"
 
-#: builtin/remote.c:1465 builtin/remote.c:1539
+#: builtin/remote.c:1435 builtin/remote.c:1509
 #, c-format
 msgid "No such remote '%s'"
 msgstr "Нет такого внешнего репозитория «%s»"
 
-#: builtin/remote.c:1485
+#: builtin/remote.c:1455
 msgid "add branch"
 msgstr "добавить ветку"
 
-#: builtin/remote.c:1492
+#: builtin/remote.c:1462
 msgid "no remote specified"
 msgstr "не указан внешний репозиторий"
 
-#: builtin/remote.c:1514
+#: builtin/remote.c:1484
 msgid "manipulate push URLs"
 msgstr "управление URL отправки"
 
-#: builtin/remote.c:1516
+#: builtin/remote.c:1486
 msgid "add URL"
 msgstr "добавить URL"
 
-#: builtin/remote.c:1518
+#: builtin/remote.c:1488
 msgid "delete URLs"
 msgstr "удалить URL"
 
-#: builtin/remote.c:1525
+#: builtin/remote.c:1495
 msgid "--add --delete doesn't make sense"
 msgstr "--add нельзя использовать одновременно с --delete"
 
-#: builtin/remote.c:1565
+#: builtin/remote.c:1535
 #, c-format
 msgid "Invalid old URL pattern: %s"
 msgstr "Неправильный шаблон старого URL: %s"
 
-#: builtin/remote.c:1573
+#: builtin/remote.c:1543
 #, c-format
 msgid "No such URL found: %s"
 msgstr "Не найдены совпадения URL: %s"
 
-#: builtin/remote.c:1575
+#: builtin/remote.c:1545
 msgid "Will not delete all non-push URLs"
 msgstr "Нельзя удалить все URL не-отправки"
 
-#: builtin/remote.c:1589
+#: builtin/remote.c:1559
 msgid "be verbose; must be placed before a subcommand"
 msgstr "быть многословнее; должно стоять перед подкомандой"
 
@@ -8743,7 +9287,7 @@ msgstr "максимальный размер каждого из файлов 
 msgid "repack objects in packs marked with .keep"
 msgstr "переупаковать объекты в пакеты, помеченные файлом .keep"
 
-#: builtin/repack.c:377
+#: builtin/repack.c:378
 #, c-format
 msgid "removing '%s' failed"
 msgstr "не удалось удалить «%s»"
@@ -8925,11 +9469,6 @@ msgstr "записать только факт того, что удаленны
 msgid "Failed to resolve '%s' as a valid revision."
 msgstr "Не удалось распознать «%s» как действительную редакцию."
 
-#: builtin/reset.c:308 builtin/reset.c:316
-#, c-format
-msgid "Could not parse object '%s'."
-msgstr "Не удалось разобрать объект «%s»."
-
 #: builtin/reset.c:313
 #, c-format
 msgid "Failed to resolve '%s' as a valid tree."
@@ -8970,6 +9509,10 @@ msgstr "Не удалось сбросить файл индекса на ред
 msgid "Could not write new index file."
 msgstr "Не удалось записать новый файл индекса."
 
+#: builtin/rev-list.c:354
+msgid "rev-list does not support display of notes"
+msgstr "rev-list не поддерживает отображение заметок"
+
 #: builtin/rev-parse.c:361
 msgid "git rev-parse --parseopt [<options>] -- [<args>...]"
 msgstr "git rev-parse --parseopt [<опции>] -- [<аргументы>…]"
@@ -8986,7 +9529,7 @@ msgstr "остановить разбор после первого аргуме
 msgid "output in stuck long form"
 msgstr "выводить аргументы в длинном формате"
 
-#: builtin/rev-parse.c:499
+#: builtin/rev-parse.c:502
 msgid ""
 "git rev-parse --parseopt [<options>] -- [<args>...]\n"
 "   or: git rev-parse --sq-quote [<arg>...]\n"
@@ -9056,10 +9599,6 @@ msgstr "опция для стратегии слияния"
 msgid "append commit name"
 msgstr "добавить имя коммита"
 
-#: builtin/revert.c:105
-msgid "allow fast-forward"
-msgstr "разрешить перемотку вперед"
-
 #: builtin/revert.c:106
 msgid "preserve initially empty commits"
 msgstr "сохранить изначально пустые коммиты"
@@ -9180,6 +9719,28 @@ msgstr "не удаляю рекурсивно «%s» без указания о
 msgid "git rm: unable to remove %s"
 msgstr "git rm: не удалось удалить %s"
 
+#: builtin/send-pack.c:18
+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 "git send-pack [--all | --mirror] [--dry-run] [--force] [--receive-pack=<git-receive-pack>] [--verbose] [--thin] [--atomic] [<сервер>:]<каталог> [<ссылка>…]\n  --all и явная спецификация <ссылки> взаимно исключающие."
+
+#: builtin/send-pack.c:160
+msgid "remote name"
+msgstr "имя внешнего репозитория"
+
+#: builtin/send-pack.c:171
+msgid "use stateless RPC protocol"
+msgstr "протокол без сохранения состояния для RPC"
+
+#: builtin/send-pack.c:172
+msgid "read refs from stdin"
+msgstr "прочитать ссылки из стандартного ввода"
+
+#: builtin/send-pack.c:173
+msgid "print status from remote helper"
+msgstr "вывести статус от скрипта внешнего сервера"
+
 #: builtin/shortlog.c:13
 msgid "git shortlog [<options>] [<revision-range>] [[--] [<path>...]]"
 msgstr "git shortlog [<опции>] [<диапазон-редакций>] [[--] [<путь>…]]"
@@ -9292,8 +9853,8 @@ msgid ""
 msgstr "git show-ref [-q | --quiet] [--verify] [--head] [-d | --dereference] [-s | --hash[=<n>]] [--abbrev[=<n>]] [--tags] [--heads] [--] [<шаблон>…]"
 
 #: builtin/show-ref.c:11
-msgid "git show-ref --exclude-existing[=pattern] < ref-list"
-msgstr "git show-ref --exclude-existing[=шаблон] < ref-list"
+msgid "git show-ref --exclude-existing[=<pattern>] < <ref-list>"
+msgstr "git show-ref --exclude-existing[=<шаблон>] < <список-ссылок>"
 
 #: builtin/show-ref.c:170
 msgid "only show tags (can be combined with heads)"
@@ -9347,11 +9908,11 @@ msgstr "удалить символьные ссылки"
 msgid "shorten ref output"
 msgstr "укороченный вывод ссылок"
 
-#: builtin/symbolic-ref.c:43 builtin/update-ref.c:358
+#: builtin/symbolic-ref.c:43 builtin/update-ref.c:362
 msgid "reason"
 msgstr "причина"
 
-#: builtin/symbolic-ref.c:43 builtin/update-ref.c:358
+#: builtin/symbolic-ref.c:43 builtin/update-ref.c:362
 msgid "reason of the update"
 msgstr "причина обновления"
 
@@ -9462,110 +10023,114 @@ msgstr "при указании параметра «points-at» требует
 msgid "malformed object name '%s'"
 msgstr "Поврежденное имя объекта «%s»"
 
-#: builtin/tag.c:589
+#: builtin/tag.c:590
 msgid "list tag names"
 msgstr "список названий меток"
 
-#: builtin/tag.c:591
+#: builtin/tag.c:592
 msgid "print <n> lines of each tag message"
 msgstr "печатать <n> строк описания от каждой метки"
 
-#: builtin/tag.c:593
+#: builtin/tag.c:594
 msgid "delete tags"
 msgstr "удалить метки"
 
-#: builtin/tag.c:594
+#: builtin/tag.c:595
 msgid "verify tags"
 msgstr "проверить метки"
 
-#: builtin/tag.c:596
+#: builtin/tag.c:597
 msgid "Tag creation options"
 msgstr "Настройки создания метки"
 
-#: builtin/tag.c:598
+#: builtin/tag.c:599
 msgid "annotated tag, needs a message"
 msgstr "для аннотированной метки нужно сообщение"
 
-#: builtin/tag.c:600
+#: builtin/tag.c:601
 msgid "tag message"
 msgstr "описание метки"
 
-#: builtin/tag.c:602
+#: builtin/tag.c:603
 msgid "annotated and GPG-signed tag"
 msgstr "аннотированная и подписанная с помощью GPG метка"
 
-#: builtin/tag.c:606
+#: builtin/tag.c:607
 msgid "use another key to sign the tag"
 msgstr "использовать другой ключ для подписания метки"
 
-#: builtin/tag.c:607
+#: builtin/tag.c:608
 msgid "replace the tag if exists"
 msgstr "замена метки, если она существует"
 
-#: builtin/tag.c:609
+#: builtin/tag.c:609 builtin/update-ref.c:368
+msgid "create a reflog"
+msgstr "создать журнал ссылок"
+
+#: builtin/tag.c:611
 msgid "Tag listing options"
 msgstr "Настройки вывода списка меток"
 
-#: builtin/tag.c:610
+#: builtin/tag.c:612
 msgid "show tag list in columns"
 msgstr "показать список меток по столбцам"
 
-#: builtin/tag.c:612
+#: builtin/tag.c:614
 msgid "sort tags"
 msgstr "отсортировать метки"
 
-#: builtin/tag.c:617 builtin/tag.c:623
+#: builtin/tag.c:619 builtin/tag.c:625
 msgid "print only tags that contain the commit"
 msgstr "вывод только меток, которые содержат коммит"
 
-#: builtin/tag.c:629
+#: builtin/tag.c:631
 msgid "print only tags of the object"
 msgstr "вывод только меток, определенного объекта"
 
-#: builtin/tag.c:655
+#: builtin/tag.c:657
 msgid "--column and -n are incompatible"
 msgstr "--column и -n нельзя использовать одновременно"
 
-#: builtin/tag.c:667
+#: builtin/tag.c:669
 msgid "--sort and -n are incompatible"
 msgstr "--sort и -n нельзя использовать одновременно"
 
-#: builtin/tag.c:674
+#: builtin/tag.c:676
 msgid "-n option is only allowed with -l."
 msgstr "опцию -n можно использовать только вместе с -l."
 
-#: builtin/tag.c:676
+#: builtin/tag.c:678
 msgid "--contains option is only allowed with -l."
 msgstr "опцию --contains можно использовать только вместе с -l."
 
-#: builtin/tag.c:678
+#: builtin/tag.c:680
 msgid "--points-at option is only allowed with -l."
 msgstr "опцию --points-at можно использовать только вместе с -l."
 
-#: builtin/tag.c:686
+#: builtin/tag.c:688
 msgid "only one -F or -m option is allowed."
 msgstr "-F и -m нельзя использовать одновременно."
 
-#: builtin/tag.c:706
+#: builtin/tag.c:708
 msgid "too many params"
 msgstr "передано слишком много параметров"
 
-#: builtin/tag.c:712
+#: builtin/tag.c:714
 #, c-format
 msgid "'%s' is not a valid tag name."
 msgstr "«%s» не является допустимым именем метки."
 
-#: builtin/tag.c:717
+#: builtin/tag.c:719
 #, c-format
 msgid "tag '%s' already exists"
 msgstr "метка «%s» уже существует"
 
-#: builtin/tag.c:741
+#: builtin/tag.c:744
 #, c-format
 msgid "Updated tag '%s' (was %s)\n"
 msgstr "Метка «%s» обновлена (была %s)\n"
 
-#: builtin/unpack-objects.c:489
+#: builtin/unpack-objects.c:490
 msgid "Unpacking objects"
 msgstr "Распаковка объектов"
 
@@ -9763,19 +10328,19 @@ msgstr "git update-ref [<опции>]    <имя-ссылки> <новое-зн
 msgid "git update-ref [<options>] --stdin [-z]"
 msgstr "git update-ref [<опции>] --stdin [-z]"
 
-#: builtin/update-ref.c:359
+#: builtin/update-ref.c:363
 msgid "delete the reference"
 msgstr "удалить ссылку"
 
-#: builtin/update-ref.c:361
+#: builtin/update-ref.c:365
 msgid "update <refname> not the one it points to"
 msgstr "обновить <имя-ссылки> а не то, на что она указывает"
 
-#: builtin/update-ref.c:362
+#: builtin/update-ref.c:366
 msgid "stdin has NUL-terminated arguments"
 msgstr "ввод отделенный НУЛЕВЫМИ символами"
 
-#: builtin/update-ref.c:363
+#: builtin/update-ref.c:367
 msgid "read updates from stdin"
 msgstr "прочитать обновления из стандартного ввода"
 
@@ -9791,10 +10356,14 @@ msgstr "обновить информацию о серверах с нуля"
 msgid "git verify-commit [-v | --verbose] <commit>..."
 msgstr "git verify-commit [-v | --verbose] <коммит>…"
 
-#: builtin/verify-commit.c:75
+#: builtin/verify-commit.c:72
 msgid "print commit contents"
 msgstr "вывести содержимое коммита"
 
+#: builtin/verify-commit.c:73 builtin/verify-tag.c:84
+msgid "print raw gpg status output"
+msgstr "выводить сырой вывод статуса от gpg"
+
 #: builtin/verify-pack.c:54
 msgid "git verify-pack [-v | --verbose] [-s | --stat-only] <pack>..."
 msgstr "git verify-pack [-v | --verbose] [-s | --stat-only] <пакет>…"
@@ -9811,86 +10380,82 @@ msgstr "вывести только статистику"
 msgid "git verify-tag [-v | --verbose] <tag>..."
 msgstr "git verify-tag [-v | --verbose] <метка>…"
 
-#: builtin/verify-tag.c:73
+#: builtin/verify-tag.c:83
 msgid "print tag contents"
 msgstr "вывести содержимое метки"
 
-#: builtin/worktree.c:11
+#: builtin/worktree.c:13
 msgid "git worktree add [<options>] <path> <branch>"
 msgstr "git worktree add [<опции>] <путь> <ветка>"
 
-#: builtin/worktree.c:12
+#: builtin/worktree.c:14
 msgid "git worktree prune [<options>]"
 msgstr "git worktree prune [<опции>]"
 
-#: builtin/worktree.c:27
+#: builtin/worktree.c:36
 #, c-format
 msgid "Removing worktrees/%s: not a valid directory"
 msgstr "Удаление рабочих каталогов/%s: не является каталогом"
 
-#: builtin/worktree.c:33
+#: builtin/worktree.c:42
 #, c-format
 msgid "Removing worktrees/%s: gitdir file does not exist"
 msgstr "Удаление рабочих каталогов/%s: файл gitdir не существует"
 
-#: builtin/worktree.c:38
+#: builtin/worktree.c:47
 #, c-format
 msgid "Removing worktrees/%s: unable to read gitdir file (%s)"
 msgstr "Удаление рабочих каталогов/%s: не удалось прочитать файл gitdir (%s)"
 
-#: builtin/worktree.c:49
+#: builtin/worktree.c:58
 #, c-format
 msgid "Removing worktrees/%s: invalid gitdir file"
 msgstr "Удаление рабочих каталогов/%s: недействительный файл gitdir"
 
-#: builtin/worktree.c:65
+#: builtin/worktree.c:74
 #, c-format
 msgid "Removing worktrees/%s: gitdir file points to non-existent location"
 msgstr "Удаление рабочих каталогов/%s: gitdir указывает на несуществующее расположение"
 
-#: builtin/worktree.c:100
+#: builtin/worktree.c:109
 #, c-format
 msgid "failed to remove: %s"
 msgstr "не удалось удалить: %s"
 
-#: builtin/worktree.c:186
+#: builtin/worktree.c:198
 #, c-format
 msgid "'%s' already exists"
 msgstr "«%s» уже существует"
 
-#: builtin/worktree.c:207
+#: builtin/worktree.c:232
 #, c-format
 msgid "could not create directory of '%s'"
 msgstr "не удалось создать каталог «%s»"
 
-#: builtin/worktree.c:241
-msgid "unable to resolve HEAD"
-msgstr "не удалось определить HEAD"
-
-#: builtin/worktree.c:249
+#: builtin/worktree.c:268
 #, c-format
-msgid "Enter %s (identifier %s)"
-msgstr "Ð\92Ñ\85од Ð² %s (идентификатор %s)"
+msgid "Preparing %s (identifier %s)"
+msgstr "Ð\9fодгоÑ\82овка %s (идентификатор %s)"
 
-#: builtin/worktree.c:281
+#: builtin/worktree.c:316
 msgid "checkout <branch> even if already checked out in other worktree"
 msgstr "перейти на <ветка> даже если она уже активна в другом рабочесм каталоге"
 
-#: builtin/worktree.c:283
+#: builtin/worktree.c:318
 msgid "create a new branch"
 msgstr "создать новую ветку"
 
-#: builtin/worktree.c:285
+#: builtin/worktree.c:320
 msgid "create or reset a branch"
 msgstr "создать или перейти на ветку"
 
-#: builtin/worktree.c:286
+#: builtin/worktree.c:321
 msgid "detach HEAD at named commit"
 msgstr "отсоединить HEAD на указанном коммите"
 
-#: builtin/worktree.c:292
-msgid "-b and -B are mutually exclusive"
-msgstr "-b и -B нельзя использовать одновременно"
+#: builtin/worktree.c:328
+msgid "-b, -B, and --detach are mutually exclusive"
+msgstr "-b, -B и --detach нельзя использовать одновременно"
 
 #: builtin/write-tree.c:13
 msgid "git write-tree [--missing-ok] [--prefix=<prefix>/]"
@@ -9908,7 +10473,7 @@ msgstr "вывести объект дерева для подкаталога 
 msgid "only useful for debugging"
 msgstr "используется только при отладке"
 
-#: credential-cache--daemon.c:267
+#: credential-cache--daemon.c:255
 msgid "print debugging messages to stderr"
 msgstr "вывод отладочных сообщений на stderr"
 
@@ -9919,465 +10484,284 @@ msgid ""
 "to read about a specific subcommand or concept."
 msgstr "«git help -а» и «git help -g» выводит список доступных подкоманд и\nнекоторые руководства по темам. Запустите «git help <команда>» или\n«git help <термин>», чтобы прочесть о конкретных подкоманде или теме."
 
-#: common-cmds.h:10
+#: common-cmds.h:9
 msgid "start a working area (see also: git help tutorial)"
 msgstr "создать рабочую область (смотрите также: git help tutorial)"
 
-#: common-cmds.h:11
+#: common-cmds.h:10
 msgid "work on the current change (see also: git help everyday)"
 msgstr "работа с текущими изменениями (смотрите также: git help everyday)"
 
-#: common-cmds.h:12
+#: common-cmds.h:11
 msgid "examine the history and state (see also: git help revisions)"
 msgstr "просмотр истории и текущего состояния (смотрите также: git help revisions)"
 
-#: common-cmds.h:13
+#: common-cmds.h:12
 msgid "grow, mark and tweak your common history"
 msgstr "выращивание, отметка и настройка вашей общей истории"
 
-#: common-cmds.h:14
+#: common-cmds.h:13
 msgid "collaborate (see also: git help workflows)"
 msgstr "совместная работа (смотрите также: git help workflows)"
 
-#: common-cmds.h:18
+#: common-cmds.h:17
 msgid "Add file contents to the index"
 msgstr "Добавление содержимого файла в индекс"
 
-#: common-cmds.h:19
-msgid "Find by binary search the change that introduced a bug"
-msgstr "Ð\94воичный поиск изменения, которое вносит ошибку"
+#: common-cmds.h:18
+msgid "Use binary search to find the commit that introduced a bug"
+msgstr "Ð\98Ñ\81полÑ\8cзоваÑ\82Ñ\8c Ð´воичный поиск изменения, которое вносит ошибку"
 
-#: common-cmds.h:20
+#: common-cmds.h:19
 msgid "List, create, or delete branches"
 msgstr "Вывод списка, создание или удаление веток"
 
-#: common-cmds.h:21
+#: common-cmds.h:20
 msgid "Switch branches or restore working tree files"
 msgstr "Переключение веток или восстановление файлов в рабочем каталоге"
 
-#: common-cmds.h:22
+#: common-cmds.h:21
 msgid "Clone a repository into a new directory"
 msgstr "Клонирование репозитория в новый каталог"
 
-#: common-cmds.h:23
+#: common-cmds.h:22
 msgid "Record changes to the repository"
 msgstr "Запись изменений в репозиторий"
 
-#: common-cmds.h:24
+#: common-cmds.h:23
 msgid "Show changes between commits, commit and working tree, etc"
 msgstr "Вывод разницы между коммитами, коммитом и рабочим каталогом и т.д."
 
-#: common-cmds.h:25
+#: common-cmds.h:24
 msgid "Download objects and refs from another repository"
 msgstr "Загрузка объектов и ссылок из другого репозитория"
 
-#: common-cmds.h:26
+#: common-cmds.h:25
 msgid "Print lines matching a pattern"
 msgstr "Вывод строк, соответствующих шаблону"
 
-#: common-cmds.h:27
+#: common-cmds.h:26
 msgid "Create an empty Git repository or reinitialize an existing one"
 msgstr "Создание пустого репозитория Git или реинициализация существующего"
 
-#: common-cmds.h:28
+#: common-cmds.h:27
 msgid "Show commit logs"
 msgstr "Вывод истории коммитов"
 
-#: common-cmds.h:29
+#: common-cmds.h:28
 msgid "Join two or more development histories together"
 msgstr "Объединение одной или нескольких историй разработки вместе"
 
-#: common-cmds.h:30
+#: common-cmds.h:29
 msgid "Move or rename a file, a directory, or a symlink"
 msgstr "Перемещение или переименование файла, каталога или символьной ссылки"
 
-#: common-cmds.h:31
+#: common-cmds.h:30
 msgid "Fetch from and integrate with another repository or a local branch"
 msgstr "Извлечение изменений и объединение с другим репозиторием или локальной веткой"
 
-#: common-cmds.h:32
+#: common-cmds.h:31
 msgid "Update remote refs along with associated objects"
 msgstr "Обновление внешних ссылок и связанных объектов"
 
-#: common-cmds.h:33
+#: common-cmds.h:32
 msgid "Forward-port local commits to the updated upstream head"
 msgstr "Перемещение локальных коммитов над обновленной вышестоящей веткой"
 
-#: common-cmds.h:34
+#: common-cmds.h:33
 msgid "Reset current HEAD to the specified state"
 msgstr "Сброс текущего состояния HEAD на указанное состояние"
 
-#: common-cmds.h:35
+#: common-cmds.h:34
 msgid "Remove files from the working tree and from the index"
 msgstr "Удаление файлов из рабочего каталога и индекса"
 
-#: common-cmds.h:36
+#: common-cmds.h:35
 msgid "Show various types of objects"
 msgstr "Вывод различных типов объектов"
 
-#: common-cmds.h:37
+#: common-cmds.h:36
 msgid "Show the working tree status"
 msgstr "Вывод состояния рабочего каталога"
 
-#: common-cmds.h:38
+#: common-cmds.h:37
 msgid "Create, list, delete or verify a tag object signed with GPG"
 msgstr "Создание, вывод списка, удаление или проверка метки, подписанной с помощью GPG"
 
-#: parse-options.h:142
+#: parse-options.h:145
 msgid "expiry-date"
 msgstr "дата-окончания"
 
-#: parse-options.h:157
+#: parse-options.h:160
 msgid "no-op (backward compatibility)"
 msgstr "ничего не делает (оставлено для обратной совместимости)"
 
-#: parse-options.h:231
+#: parse-options.h:236
 msgid "be more verbose"
 msgstr "быть многословнее"
 
-#: parse-options.h:233
+#: parse-options.h:238
 msgid "be more quiet"
 msgstr "тихий режим"
 
-#: parse-options.h:239
+#: parse-options.h:244
 msgid "use <n> digits to display SHA-1s"
 msgstr "использовать <n> цифр для вывода SHA-1"
 
-#: rerere.h:27
+#: rerere.h:28
 msgid "update the index with reused conflict resolution if possible"
 msgstr "обновить индекс с помощью переиспользования разрешения конфликта, если возможно"
 
-#: git-am.sh:53
-msgid "You need to set your committer info first"
-msgstr "Сначала нужно указать вашу информацию о коммитере"
-
-#: git-am.sh:100
-msgid ""
-"You seem to have moved HEAD since the last 'am' failure.\n"
-"Not rewinding to ORIG_HEAD"
-msgstr "Похоже, что вы переместили HEAD с момента последней ошибки выполнения «am».\nПеремотка на ORIG_HEAD не выполняется"
-
-#: git-am.sh:110
-#, sh-format
-msgid ""
-"When you have resolved this problem, run \"$cmdline --continue\".\n"
-"If you prefer to skip this patch, run \"$cmdline --skip\" instead.\n"
-"To restore the original branch and stop patching, run \"$cmdline --abort\"."
-msgstr "Когда вы разрешите этот конфликт, запустите «$cmdline --continue».\nЕсли вы хотите пропустить этот патч, то запустите «$cmdline --skip».\nЧтобы перейти на оригинальную ветку и остановить применение изменений, запустите «$cmdline --abort»."
-
-#: git-am.sh:126
-msgid "Cannot fall back to three-way merge."
-msgstr "Не удалось откатиться к трехходовому слиянию."
-
-#: git-am.sh:142
-msgid "Repository lacks necessary blobs to fall back on 3-way merge."
-msgstr "В репозитории отсутствуют двоичные объекты, необходимые для отката к трехходовому слиянию."
-
-#: git-am.sh:144
-msgid "Using index info to reconstruct a base tree..."
-msgstr "Использую индекс для реконструкции базового дерева…"
-
-#: git-am.sh:159
-msgid ""
-"Did you hand edit your patch?\n"
-"It does not apply to blobs recorded in its index."
-msgstr "Вы вручную изменяли патч?\nОн не накладывается без ошибок на двоичные объекты, записанные в его заголовке."
-
-#: git-am.sh:168
-msgid "Falling back to patching base and 3-way merge..."
-msgstr "Откат к применению изменений к базовому коммиту с помощью трехходового слияния…"
-
-#: git-am.sh:185
-msgid "Failed to merge in the changes."
-msgstr "Не удалось слить изменения."
-
-#: git-am.sh:280
-msgid "Only one StGIT patch series can be applied at once"
-msgstr "Только серия патчей StGIT может быть применена за раз"
-
-#: git-am.sh:367
-#, sh-format
-msgid "Patch format $patch_format is not supported."
-msgstr "Неподдерживаемый формат патча $patch_format."
-
-#: git-am.sh:369
-msgid "Patch format detection failed."
-msgstr "Сбой определения формата патча."
-
-#: git-am.sh:407
-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. Пожалуйста, не используйте ее."
-
-#: git-am.sh:507
-#, sh-format
-msgid "previous rebase directory $dotest still exists but mbox given."
-msgstr "предыдущий каталог перемещения $dotest еще существует, но передан mbox."
-
-#: git-am.sh:512
-msgid "Please make up your mind. --skip or --abort?"
-msgstr "Пожалуйста, определитесь: --skip или --abort?"
-
-#: git-am.sh:560
-#, sh-format
-msgid ""
-"Stray $dotest directory found.\n"
-"Use \"git am --abort\" to remove it."
-msgstr "Найден забытый каталог $dotest.\nИспользуйте «git am --abort», чтобы удалить его."
-
-#: git-am.sh:568
-msgid "Resolve operation not in progress, we are not resuming."
-msgstr "Операция разрешения конфликтов не в процессе выполнения, не продолжаем."
-
-#: git-am.sh:635
-#, sh-format
-msgid "Dirty index: cannot apply patches (dirty: $files)"
-msgstr "Индекс не пустой: нельзя применять патчи (в индексе: $files)"
-
-#: git-am.sh:747
-#, sh-format
-msgid ""
-"Patch is empty.  Was it split wrong?\n"
-"If you would prefer to skip this patch, instead run \"$cmdline --skip\".\n"
-"To restore the original branch and stop patching run \"$cmdline --abort\"."
-msgstr "Патч пуст. Возможно, он был неправильно разделен?\nЕсли вы хотите пропустить этот патч, то вместо этого запустите «$cmdline --skip».\nЧтобы перейти на оригинальную ветку и остановить применение изменений, запустите «$cmdline --abort»."
-
-#: git-am.sh:774
-msgid "Patch does not have a valid e-mail address."
-msgstr "Патч не содержит действительный адрес электронной почты."
-
-#: git-am.sh:821
-msgid "cannot be interactive without stdin connected to a terminal."
-msgstr "не удалось использовать интерактивное поведение, без stdin подключенного к терминалу."
-
-#: git-am.sh:825
-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.
-#: git-am.sh:832
-msgid "Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all "
-msgstr "Применить? [y] - да/[n] - нет/[e] - редактировать/[v] - просмотреть патч/[a] - применить все "
-
-#: git-am.sh:868
-#, sh-format
-msgid "Applying: $FIRSTLINE"
-msgstr "Применение: $FIRSTLINE"
-
-#: git-am.sh:889
-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Если ничего не осталось для индексации, то, скорее всего, что-то другое уже сделало те же изменения; возможно, вам следует пропустить этот патч."
-
-#: git-am.sh:897
-msgid ""
-"You still have unmerged paths in your index\n"
-"did you forget to use 'git add'?"
-msgstr "У вас все еще имеются не слитые пути в индексе.\nВозможно, вы забыли вызвать «git add»?"
-
-#: git-am.sh:913
-msgid "No changes -- Patch already applied."
-msgstr "Нет изменений — Патч уже применен."
-
-#: git-am.sh:923
-#, sh-format
-msgid "Patch failed at $msgnum $FIRSTLINE"
-msgstr "Ошибка применения изменений на строке $msgnum $FIRSTLINE"
-
-#: git-am.sh:926
-#, sh-format
-msgid ""
-"The copy of the patch that failed is found in:\n"
-"   $dotest/patch"
-msgstr "Копию изменений, которые не удалось применить, вы можете найти в:\n   $dotest/patch"
-
-#: git-am.sh:945
-msgid "applying to an empty history"
-msgstr "применение к пустой истории"
-
-#: git-bisect.sh:48
+#: git-bisect.sh:50
 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:54
+#: git-bisect.sh:56
 msgid "Do you want me to do it for you [Y/n]? "
 msgstr "Вы уверены, что хотите, чтобы я сделал это [Y - да/n - нет]? "
 
-#: git-bisect.sh:95
+#: git-bisect.sh:99
 #, sh-format
 msgid "unrecognised option: '$arg'"
 msgstr "неопознанная опция: «$arg»"
 
-#: git-bisect.sh:99
+#: git-bisect.sh:103
 #, sh-format
 msgid "'$arg' does not appear to be a valid revision"
 msgstr "«$arg» не похоже на действительную редакцию"
 
-#: git-bisect.sh:117
+#: git-bisect.sh:132
 msgid "Bad HEAD - I need a HEAD"
 msgstr "Плохой указатель HEAD — Необходим указатель HEAD"
 
-#: git-bisect.sh:130
+#: git-bisect.sh:145
 #, sh-format
 msgid ""
 "Checking out '$start_head' failed. Try 'git bisect reset <valid-branch>'."
 msgstr "Сбой перехода на «$start_head». Попробуйте выполнить «git bisect reset <существующая-ветка>»."
 
-#: git-bisect.sh:140
+#: git-bisect.sh:155
 msgid "won't bisect on cg-seek'ed tree"
 msgstr "нельзя выполнить двоичный поиск на дереве после cg-seek"
 
-#: git-bisect.sh:144
+#: git-bisect.sh:159
 msgid "Bad HEAD - strange symbolic ref"
 msgstr "Плохой указатель HEAD — странная символьная ссылка"
 
-#: git-bisect.sh:189
+#: git-bisect.sh:211
 #, sh-format
 msgid "Bad bisect_write argument: $state"
 msgstr "Плохой аргумент bisect_write: $state"
 
-#: git-bisect.sh:218
+#: git-bisect.sh:240
 #, sh-format
 msgid "Bad rev input: $arg"
 msgstr "Плохой ввод номера редакции: $arg"
 
-#: git-bisect.sh:232
+#: git-bisect.sh:255
 msgid "Please call 'bisect_state' with at least one argument."
 msgstr "Пожалуйста, вызывайте «bisect_state» как минимум с одним аргументом."
 
-#: git-bisect.sh:244
+#: git-bisect.sh:267
 #, sh-format
 msgid "Bad rev input: $rev"
 msgstr "Плохой ввод номера редакции: $rev"
 
-#: git-bisect.sh:253
-msgid "'git bisect bad' can take only one argument."
-msgstr "«git bisect bad» может принимать только один аргумент."
-
 #: git-bisect.sh:276
-msgid "Warning: bisecting only with a bad commit."
-msgstr "Предупреждение: попытка двоичного поиска с указанием только плохого коммита."
+#, sh-format
+msgid "'git bisect $TERM_BAD' can take only one argument."
+msgstr "«git bisect $TERM_BAD» может принимать только один аргумент."
+
+#: git-bisect.sh:299
+#, sh-format
+msgid "Warning: bisecting only with a $TERM_BAD commit."
+msgstr "Предупреждение: попытка двоичного поиска с указанием только $TERM_BAD коммита."
 
 #. TRANSLATORS: Make sure to include [Y] and [n] in your
 #. translation. The program will only accept English input
 #. at this point.
-#: git-bisect.sh:282
+#: git-bisect.sh:305
 msgid "Are you sure [Y/n]? "
 msgstr "Вы уверены [Y - да/n - нет]? "
 
-#: git-bisect.sh:292
+#: git-bisect.sh:317
+#, sh-format
 msgid ""
-"You need to give me at least one good and one bad revision.\n"
-"(You can use \"git bisect bad\" and \"git bisect good\" for that.)"
-msgstr "Вам нужно передать мне как минимум одну хорошую и одну плохую редакцию.\n(Для этого вы можете использовать команды «git bisect bad» и «git bisect good».)"
+"You need to give me at least one $bad_syn and one $good_syn revision.\n"
+"(You can use \"git bisect $bad_syn\" and \"git bisect $good_syn\" for that.)"
+msgstr "Вам нужно передать мне как минимум одну $bad_syn и одну $good_syn редакцию.\n(Для этого вы можете использовать команды «git bisect $bad_syn» и «git bisect $good_syn».)"
 
-#: git-bisect.sh:295
+#: git-bisect.sh:320
+#, sh-format
 msgid ""
 "You need to start by \"git bisect start\".\n"
-"You then need to give me at least one good and one bad revision.\n"
-"(You can use \"git bisect bad\" and \"git bisect good\" for that.)"
-msgstr "Для начала нужно запустить «git bisect start».\nПосле этого, вам нужно передать мне как минимум одну хорошую и одну плохую редакцию.\n(Для этого вы можете использовать команды «git bisect bad» и «git bisect good».)"
+"You then need to give me at least one $good_syn and one $bad_syn revision.\n"
+"(You can use \"git bisect $bad_syn\" and \"git bisect $good_syn\" for that.)"
+msgstr "Для начала нужно запустить «git bisect start».\nПосле этого, вам нужно передать мне как минимум одну $good_syn и одну $bad_syn редакцию.\n(Для этого вы можете использовать команды «git bisect $good_syn» и «git bisect $good_syn».)"
 
-#: git-bisect.sh:366 git-bisect.sh:493
+#: git-bisect.sh:391 git-bisect.sh:521
 msgid "We are not bisecting."
 msgstr "Вы сейчас не в процессе бинарного поиска."
 
-#: git-bisect.sh:373
+#: git-bisect.sh:398
 #, sh-format
 msgid "'$invalid' is not a valid commit"
 msgstr "«$invalid» не является действительным коммитом"
 
-#: git-bisect.sh:382
+#: git-bisect.sh:407
 #, sh-format
 msgid ""
 "Could not check out original HEAD '$branch'.\n"
 "Try 'git bisect reset <commit>'."
 msgstr "Не удалось перейти на оригинальную ветку HEAD «$branch».\nПопробуйте запустить «git bisect reset <коммит>»."
 
-#: git-bisect.sh:409
+#: git-bisect.sh:435
 msgid "No logfile given"
 msgstr "Не передан файл журнала"
 
-#: git-bisect.sh:410
+#: git-bisect.sh:436
 #, sh-format
 msgid "cannot read $file for replaying"
 msgstr "не удалось прочитать $file для повтора изменений"
 
-#: git-bisect.sh:427
+#: git-bisect.sh:455
 msgid "?? what are you talking about?"
 msgstr "?? вы о чем?"
 
-#: git-bisect.sh:439
+#: git-bisect.sh:467
 #, sh-format
 msgid "running $command"
 msgstr "запускаю $command"
 
-#: git-bisect.sh:446
+#: git-bisect.sh:474
 #, 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:472
+#: git-bisect.sh:500
 msgid "bisect run cannot continue any more"
 msgstr "bisect run больше не может продолжать"
 
-#: git-bisect.sh:478
+#: git-bisect.sh:506
 #, sh-format
 msgid ""
 "bisect run failed:\n"
 "'bisect_state $state' exited with error code $res"
 msgstr "не удалось выполнить двоичный поиск:\n«bisect_state $state» завершился с кодом ошибки $res"
 
-#: git-bisect.sh:485
+#: git-bisect.sh:513
 msgid "bisect run success"
 msgstr "bisect run выполнен успешно"
 
-#: git-pull.sh:61
-msgid ""
-"Pull is not possible because you have unmerged files.\n"
-"Please, 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 "Невозможно выполнить получение, так как у вас имеются не слитые файлы.\nИсправьте их в рабочем каталоге, затем запустите «git add/rm <файл>»,\nчтобы пометить исправление и сделайте коммит."
-
-#: git-pull.sh:65
-msgid "Pull is not possible because you have unmerged files."
-msgstr "Невозможно выполнить получение, так как у вас имеются не слитые файлы."
-
-#: git-pull.sh:71
-msgid ""
-"You have not concluded your merge (MERGE_HEAD exists).\n"
-"Please, commit your changes before you can merge."
-msgstr "Вы не завершили слияние (присутствует файл MERGE_HEAD).\nВыполните коммит ваших изменений, перед слиянием."
-
-#: git-pull.sh:285
-msgid "updating an unborn branch with changes added to the index"
-msgstr "обновление еще не начавшейся ветки с изменениями, добавленными в индекс"
-
-#: git-pull.sh:311
+#: git-bisect.sh:548
 #, sh-format
-msgid ""
-"Warning: fetch updated the current branch head.\n"
-"Warning: fast-forwarding your working tree from\n"
-"Warning: commit $orig_head."
-msgstr "Предупреждение: извлечение обновило голову вашей текущей ветки.\nПредупреждение: перемотка вашего рабочего каталога\nПредупреждение: с коммита $orig_head."
-
-#: git-pull.sh:336
-msgid "Cannot merge multiple branches into empty head"
-msgstr "Нельзя слить несколько веток в пустую указатель на коммит"
-
-#: git-pull.sh:340
-msgid "Cannot rebase onto multiple branches"
-msgstr "Невозможно переместить над несколькими ветками"
+msgid "Invalid command: you're currently in a $TERM_BAD/$TERM_GOOD bisect."
+msgstr "Недопустимая команда: вы сейчас находитесь на $TERM_BAD/$TERM_GOOD двоичном поиске."
 
 #: git-rebase.sh:57
 msgid ""
@@ -10540,7 +10924,7 @@ msgstr "Не удалось удалить временный индекс (не
 msgid "Cannot record working tree state"
 msgstr "Не удалось записать состояние рабочего каталога"
 
-#: git-stash.sh:191
+#: git-stash.sh:189
 #, sh-format
 msgid "Cannot update $ref_stash with $w_commit"
 msgstr "Не удалось обновить $ref_stash с помощью $w_commit"
@@ -10554,97 +10938,97 @@ msgstr "Не удалось обновить $ref_stash с помощью $w_com
 #. $ git stash save --blah-blah 2>&1 | head -n 2
 #. error: unknown option for 'stash save': --blah-blah
 #. To provide a message, use git stash save -- '--blah-blah'
-#: git-stash.sh:241
+#: git-stash.sh:239
 #, sh-format
 msgid ""
 "error: unknown option for 'stash save': $option\n"
 "       To provide a message, use git stash save -- '$option'"
 msgstr "ошибка: неизвестная опция для «stash save»: $option\n        Для предоставления сообщения, используйте git stash save -- «$option»"
 
-#: git-stash.sh:262
+#: git-stash.sh:260
 msgid "No local changes to save"
 msgstr "Нет локальных изменений для сохранения"
 
-#: git-stash.sh:266
+#: git-stash.sh:264
 msgid "Cannot initialize stash"
 msgstr "Не удалось инициализировать спрятанные изменения"
 
-#: git-stash.sh:270
+#: git-stash.sh:268
 msgid "Cannot save the current status"
 msgstr "Не удалось сохранить текущий статус"
 
-#: git-stash.sh:288
+#: git-stash.sh:286
 msgid "Cannot remove worktree changes"
 msgstr "Не удалось удалить изменения рабочего каталога"
 
-#: git-stash.sh:389
+#: git-stash.sh:387
 #, sh-format
 msgid "unknown option: $opt"
 msgstr "неизвестная опция: $opt"
 
-#: git-stash.sh:399
+#: git-stash.sh:397
 msgid "No stash found."
 msgstr "Не найдены спрятанные изменения."
 
-#: git-stash.sh:406
+#: git-stash.sh:404
 #, sh-format
 msgid "Too many revisions specified: $REV"
 msgstr "Передано слишком много редакций: $REV"
 
-#: git-stash.sh:412
+#: git-stash.sh:410
 #, sh-format
 msgid "$reference is not a valid reference"
 msgstr "$reference не является действительной ссылкой"
 
-#: git-stash.sh:440
+#: git-stash.sh:438
 #, sh-format
 msgid "'$args' is not a stash-like commit"
 msgstr "«$args» не похоже на коммит со спрятанными изменениями"
 
-#: git-stash.sh:451
+#: git-stash.sh:449
 #, sh-format
 msgid "'$args' is not a stash reference"
 msgstr "«$args» не является ссылкой на спрятанные изменения"
 
-#: git-stash.sh:459
+#: git-stash.sh:457
 msgid "unable to refresh index"
 msgstr "не удалось обновить индекс"
 
-#: git-stash.sh:463
+#: git-stash.sh:461
 msgid "Cannot apply a stash in the middle of a merge"
 msgstr "Нельзя применить спрятанные изменения во время выполнения слияния"
 
-#: git-stash.sh:471
+#: git-stash.sh:469
 msgid "Conflicts in index. Try without --index."
 msgstr "Конфликты в индексе. Попробуйте без --index."
 
-#: git-stash.sh:473
+#: git-stash.sh:471
 msgid "Could not save index tree"
 msgstr "Не удалось сохранить дерево индекса"
 
-#: git-stash.sh:507
+#: git-stash.sh:505
 msgid "Cannot unstage modified files"
 msgstr "Невозможно убрать из индекса измененные файлы"
 
-#: git-stash.sh:522
+#: git-stash.sh:520
 msgid "Index was not unstashed."
 msgstr "Индекс не был достат из спрятанных изменений."
 
-#: git-stash.sh:545
+#: git-stash.sh:543
 #, sh-format
 msgid "Dropped ${REV} ($s)"
 msgstr "Отброшено ${REV} ($s)"
 
-#: git-stash.sh:546
+#: git-stash.sh:544
 #, sh-format
 msgid "${REV}: Could not drop stash entry"
 msgstr "${REV}: Не удалось отбросить запись из спрятанных изменений"
 
-#: git-stash.sh:554
+#: git-stash.sh:552
 msgid "No branch name specified"
 msgstr "Не указано имя ветки"
 
-#: git-stash.sh:626
+#: git-stash.sh:624
 msgid "(To restore them type \"git stash apply\")"
 msgstr "(Чтобы восстановить их, наберите «git stash apply»)"
 
@@ -10872,7 +11256,7 @@ msgstr "Подмодуль по пути «$displaypath»: слито с «$sha1
 #: git-submodule.sh:907
 #, sh-format
 msgid ""
-"Execution of '$command $sha1' failed in submodule  path '$prefix$sm_path'"
+"Execution of '$command $sha1' failed in submodule path '$prefix$sm_path'"
 msgstr "Сбой выполнения «$command $sha1» для подмодуля по пути «$prefix$sm_path»"
 
 #: git-submodule.sh:908
diff --git a/quote.c b/quote.c
index 7920e18e44834f1f86c218c172ae10227858ed66..fe884d24521f91a0f1f30b3cf5f08734bab7bd31 100644 (file)
--- a/quote.c
+++ b/quote.c
@@ -4,9 +4,15 @@
 
 int quote_path_fully = 1;
 
+static inline int need_bs_quote(char c)
+{
+       return (c == '\'' || c == '!');
+}
+
 /* Help to copy the thing properly quoted for the shell safety.
  * any single quote is replaced with '\'', any exclamation point
  * is replaced with '\!', and the whole thing is enclosed in a
+ * single quote pair.
  *
  * E.g.
  *  original     sq_quote     result
@@ -15,11 +21,6 @@ int quote_path_fully = 1;
  *  a'b      ==> a'\''b    ==> 'a'\''b'
  *  a!b      ==> a'\!'b    ==> 'a'\!'b'
  */
-static inline int need_bs_quote(char c)
-{
-       return (c == '\'' || c == '!');
-}
-
 void sq_quote_buf(struct strbuf *dst, const char *src)
 {
        char *to_free = NULL;
index 9cff25b490f7ec7c5535647afe017326a6984520..43616d49c7f88166d2fa2f009ca5b926d751ab0b 100644 (file)
@@ -25,9 +25,15 @@ static void update_progress(struct connectivity_progress *cp)
 static int add_one_ref(const char *path, const struct object_id *oid,
                       int flag, void *cb_data)
 {
-       struct object *object = parse_object_or_die(oid->hash, path);
        struct rev_info *revs = (struct rev_info *)cb_data;
+       struct object *object;
 
+       if ((flag & REF_ISSYMREF) && (flag & REF_ISBROKEN)) {
+               warning("symbolic ref is dangling: %s", path);
+               return 0;
+       }
+
+       object = parse_object_or_die(oid->hash, path);
        add_pending_object(revs, object, "");
 
        return 0;
index 3277cf797ed41e5834b3b94fa8d2e9e9d5b4a317..e09275bd9e360ee7683ef5d3753ccfe753ee8dcc 100644 (file)
@@ -18,26 +18,27 @@ struct child_to_clean {
 static struct child_to_clean *children_to_clean;
 static int installed_child_cleanup_handler;
 
-static void cleanup_children(int sig)
+static void cleanup_children(int sig, int in_signal)
 {
        while (children_to_clean) {
                struct child_to_clean *p = children_to_clean;
                children_to_clean = p->next;
                kill(p->pid, sig);
-               free(p);
+               if (!in_signal)
+                       free(p);
        }
 }
 
 static void cleanup_children_on_signal(int sig)
 {
-       cleanup_children(sig);
+       cleanup_children(sig, 1);
        sigchain_pop(sig);
        raise(sig);
 }
 
 static void cleanup_children_on_exit(void)
 {
-       cleanup_children(SIGTERM);
+       cleanup_children(SIGTERM, 0);
 }
 
 static void mark_child_for_cleanup(pid_t pid)
@@ -220,7 +221,7 @@ static inline void set_cloexec(int fd)
                fcntl(fd, F_SETFD, flags | FD_CLOEXEC);
 }
 
-static int wait_or_whine(pid_t pid, const char *argv0)
+static int wait_or_whine(pid_t pid, const char *argv0, int in_signal)
 {
        int status, code = -1;
        pid_t waiting;
@@ -228,6 +229,8 @@ static int wait_or_whine(pid_t pid, const char *argv0)
 
        while ((waiting = waitpid(pid, &status, 0)) < 0 && errno == EINTR)
                ;       /* nothing */
+       if (in_signal)
+               return 0;
 
        if (waiting < 0) {
                failed_errno = errno;
@@ -437,7 +440,7 @@ int start_command(struct child_process *cmd)
                 * At this point we know that fork() succeeded, but execvp()
                 * failed. Errors have been reported to our stderr.
                 */
-               wait_or_whine(cmd->pid, cmd->argv[0]);
+               wait_or_whine(cmd->pid, cmd->argv[0], 0);
                failed_errno = errno;
                cmd->pid = -1;
        }
@@ -536,12 +539,18 @@ int start_command(struct child_process *cmd)
 
 int finish_command(struct child_process *cmd)
 {
-       int ret = wait_or_whine(cmd->pid, cmd->argv[0]);
+       int ret = wait_or_whine(cmd->pid, cmd->argv[0], 0);
        argv_array_clear(&cmd->args);
        argv_array_clear(&cmd->env_array);
        return ret;
 }
 
+int finish_command_in_signal(struct child_process *cmd)
+{
+       return wait_or_whine(cmd->pid, cmd->argv[0], 1);
+}
+
+
 int run_command(struct child_process *cmd)
 {
        int code;
@@ -772,7 +781,7 @@ int start_async(struct async *async)
 int finish_async(struct async *async)
 {
 #ifdef NO_PTHREADS
-       return wait_or_whine(async->pid, "child process");
+       return wait_or_whine(async->pid, "child process", 0);
 #else
        void *ret = (void *)(intptr_t)(-1);
 
index 5b4425a3cbe1aea2bae40c4e060e45ee2d7a29a5..275d35c442ac575f8f3f40aeb915cd0d341c776f 100644 (file)
@@ -50,6 +50,7 @@ void child_process_init(struct child_process *);
 
 int start_command(struct child_process *);
 int finish_command(struct child_process *);
+int finish_command_in_signal(struct child_process *);
 int run_command(struct child_process *);
 
 /*
diff --git a/setup.c b/setup.c
index a17c51e61d75ac8280bf04d95c50d7bdfd6d7a0e..3324014cb7ac825fa9703cc6568190460e9cd87d 100644 (file)
--- a/setup.c
+++ b/setup.c
@@ -5,6 +5,7 @@
 static int inside_git_dir = -1;
 static int inside_work_tree = -1;
 static int work_tree_config_is_bogus;
+static struct string_list unknown_extensions = STRING_LIST_INIT_DUP;
 
 /*
  * The input parameter must contain an absolute path, and it must already be
@@ -352,10 +353,25 @@ void setup_work_tree(void)
 
 static int check_repo_format(const char *var, const char *value, void *cb)
 {
+       const char *ext;
+
        if (strcmp(var, "core.repositoryformatversion") == 0)
                repository_format_version = git_config_int(var, value);
        else if (strcmp(var, "core.sharedrepository") == 0)
                shared_repository = git_config_perm(var, value);
+       else if (skip_prefix(var, "extensions.", &ext)) {
+               /*
+                * record any known extensions here; otherwise,
+                * we fall through to recording it as unknown, and
+                * check_repository_format will complain
+                */
+               if (!strcmp(ext, "noop"))
+                       ;
+               else if (!strcmp(ext, "preciousobjects"))
+                       repository_format_precious_objects = git_config_bool(var, value);
+               else
+                       string_list_append(&unknown_extensions, ext);
+       }
        return 0;
 }
 
@@ -366,6 +382,8 @@ static int check_repository_format_gently(const char *gitdir, int *nongit_ok)
        config_fn_t fn;
        int ret = 0;
 
+       string_list_clear(&unknown_extensions, 0);
+
        if (get_common_dir(&sb, gitdir))
                fn = check_repo_format;
        else
@@ -383,16 +401,31 @@ static int check_repository_format_gently(const char *gitdir, int *nongit_ok)
         * is a good one.
         */
        git_config_early(fn, NULL, repo_config);
-       if (GIT_REPO_VERSION < repository_format_version) {
+       if (GIT_REPO_VERSION_READ < repository_format_version) {
                if (!nongit_ok)
                        die ("Expected git repo version <= %d, found %d",
-                            GIT_REPO_VERSION, repository_format_version);
+                            GIT_REPO_VERSION_READ, repository_format_version);
                warning("Expected git repo version <= %d, found %d",
-                       GIT_REPO_VERSION, repository_format_version);
+                       GIT_REPO_VERSION_READ, repository_format_version);
                warning("Please upgrade Git");
                *nongit_ok = -1;
                ret = -1;
        }
+
+       if (repository_format_version >= 1 && unknown_extensions.nr) {
+               int i;
+
+               if (!nongit_ok)
+                       die("unknown repository extension: %s",
+                           unknown_extensions.items[0].string);
+
+               for (i = 0; i < unknown_extensions.nr; i++)
+                       warning("unknown repository extension: %s",
+                               unknown_extensions.items[i].string);
+               *nongit_ok = -1;
+               ret = -1;
+       }
+
        strbuf_release(&sb);
        return ret;
 }
index f5c01758ca38b58fc10e30cfac81be5becb0316b..b1673b3e8f38d9961b8b2783e1f5c47a865638fb 100644 (file)
@@ -111,6 +111,10 @@ test_expect_success 'blame 2 authors + 2 merged-in authors' '
        check_count A 2 B 1 B1 2 B2 1
 '
 
+test_expect_success 'blame --first-parent blames merge for branch1' '
+       check_count --first-parent A 2 B 1 "A U Thor" 2 B2 1
+'
+
 test_expect_success 'blame ancestor' '
        check_count -h master A 2 B 2
 '
index 15f7fc1b8015114883bc36d1e35dffd730721e52..924b19dab4122a36112bd908a6252e754ecc531a 100755 (executable)
@@ -1,5 +1,6 @@
 #!/usr/bin/perl
 
+use lib '../../perl/blib/lib';
 use strict;
 use warnings;
 use Git;
index 0d9388afc4e20a5c536d214bfe25e630242ed667..9bcd34969f56038d3933471bc32641a277d413ba 100755 (executable)
@@ -67,4 +67,64 @@ test_expect_success 'gitdir required mode' '
        )
 '
 
+check_allow () {
+       git rev-parse --git-dir >actual &&
+       echo .git >expect &&
+       test_cmp expect actual
+}
+
+check_abort () {
+       test_must_fail git rev-parse --git-dir
+}
+
+# avoid git-config, since it cannot be trusted to run
+# in a repository with a broken version
+mkconfig () {
+       echo '[core]' &&
+       echo "repositoryformatversion = $1" &&
+       shift &&
+
+       if test $# -gt 0; then
+               echo '[extensions]' &&
+               for i in "$@"; do
+                       echo "$i"
+               done
+       fi
+}
+
+while read outcome version extensions; do
+       test_expect_success "$outcome version=$version $extensions" "
+               mkconfig $version $extensions >.git/config &&
+               check_${outcome}
+       "
+done <<\EOF
+allow 0
+allow 1
+allow 1 noop
+abort 1 no-such-extension
+allow 0 no-such-extension
+EOF
+
+test_expect_success 'precious-objects allowed' '
+       mkconfig 1 preciousObjects >.git/config &&
+       check_allow
+'
+
+test_expect_success 'precious-objects blocks destructive repack' '
+       test_must_fail git repack -ad
+'
+
+test_expect_success 'other repacks are OK' '
+       test_commit foo &&
+       git repack
+'
+
+test_expect_success 'precious-objects blocks prune' '
+       test_must_fail git prune
+'
+
+test_expect_success 'gc runs without complaint' '
+       git gc
+'
+
 test_done
index 956673b8a14d39ef6bece7629b2407b0c10a071a..dc09797021a6a5fc8eed6da4412164673ab484a1 100755 (executable)
@@ -77,11 +77,31 @@ test_expect_success 'object with bad sha1' '
 test_expect_success 'branch pointing to non-commit' '
        git rev-parse HEAD^{tree} >.git/refs/heads/invalid &&
        test_when_finished "git update-ref -d refs/heads/invalid" &&
-       git fsck 2>out &&
+       test_must_fail git fsck 2>out &&
        cat out &&
        grep "not a commit" out
 '
 
+test_expect_success 'HEAD link pointing at a funny object' '
+       test_when_finished "mv .git/SAVED_HEAD .git/HEAD" &&
+       mv .git/HEAD .git/SAVED_HEAD &&
+       echo 0000000000000000000000000000000000000000 >.git/HEAD &&
+       # avoid corrupt/broken HEAD from interfering with repo discovery
+       test_must_fail env GIT_DIR=.git git fsck 2>out &&
+       cat out &&
+       grep "detached HEAD points" out
+'
+
+test_expect_success 'HEAD link pointing at a funny place' '
+       test_when_finished "mv .git/SAVED_HEAD .git/HEAD" &&
+       mv .git/HEAD .git/SAVED_HEAD &&
+       echo "ref: refs/funny/place" >.git/HEAD &&
+       # avoid corrupt/broken HEAD from interfering with repo discovery
+       test_must_fail env GIT_DIR=.git git fsck 2>out &&
+       cat out &&
+       grep "HEAD points to something strange" out
+'
+
 test_expect_success 'email without @ is okay' '
        git cat-file commit HEAD >basis &&
        sed "s/@/AT/" basis >okay &&
diff --git a/t/t2026-prune-linked-checkouts.sh b/t/t2026-prune-linked-checkouts.sh
deleted file mode 100755 (executable)
index a0f1e3b..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-#!/bin/sh
-
-test_description='prune $GIT_DIR/worktrees'
-
-. ./test-lib.sh
-
-test_expect_success initialize '
-       git commit --allow-empty -m init
-'
-
-test_expect_success 'worktree prune on normal repo' '
-       git worktree prune &&
-       test_must_fail git worktree prune abc
-'
-
-test_expect_success 'prune files inside $GIT_DIR/worktrees' '
-       mkdir .git/worktrees &&
-       : >.git/worktrees/abc &&
-       git worktree prune --verbose >actual &&
-       cat >expect <<EOF &&
-Removing worktrees/abc: not a valid directory
-EOF
-       test_i18ncmp expect actual &&
-       ! test -f .git/worktrees/abc &&
-       ! test -d .git/worktrees
-'
-
-test_expect_success 'prune directories without gitdir' '
-       mkdir -p .git/worktrees/def/abc &&
-       : >.git/worktrees/def/def &&
-       cat >expect <<EOF &&
-Removing worktrees/def: gitdir file does not exist
-EOF
-       git worktree prune --verbose >actual &&
-       test_i18ncmp expect actual &&
-       ! test -d .git/worktrees/def &&
-       ! test -d .git/worktrees
-'
-
-test_expect_success SANITY 'prune directories with unreadable gitdir' '
-       mkdir -p .git/worktrees/def/abc &&
-       : >.git/worktrees/def/def &&
-       : >.git/worktrees/def/gitdir &&
-       chmod u-r .git/worktrees/def/gitdir &&
-       git worktree prune --verbose >actual &&
-       test_i18ngrep "Removing worktrees/def: unable to read gitdir file" actual &&
-       ! test -d .git/worktrees/def &&
-       ! test -d .git/worktrees
-'
-
-test_expect_success 'prune directories with invalid gitdir' '
-       mkdir -p .git/worktrees/def/abc &&
-       : >.git/worktrees/def/def &&
-       : >.git/worktrees/def/gitdir &&
-       git worktree prune --verbose >actual &&
-       test_i18ngrep "Removing worktrees/def: invalid gitdir file" actual &&
-       ! test -d .git/worktrees/def &&
-       ! test -d .git/worktrees
-'
-
-test_expect_success 'prune directories with gitdir pointing to nowhere' '
-       mkdir -p .git/worktrees/def/abc &&
-       : >.git/worktrees/def/def &&
-       echo "$(pwd)"/nowhere >.git/worktrees/def/gitdir &&
-       git worktree prune --verbose >actual &&
-       test_i18ngrep "Removing worktrees/def: gitdir file points to non-existent location" actual &&
-       ! test -d .git/worktrees/def &&
-       ! test -d .git/worktrees
-'
-
-test_expect_success 'not prune locked checkout' '
-       test_when_finished rm -r .git/worktrees &&
-       mkdir -p .git/worktrees/ghi &&
-       : >.git/worktrees/ghi/locked &&
-       git worktree prune &&
-       test -d .git/worktrees/ghi
-'
-
-test_expect_success 'not prune recent checkouts' '
-       test_when_finished rm -r .git/worktrees &&
-       mkdir zz &&
-       mkdir -p .git/worktrees/jlm &&
-       echo "$(pwd)"/zz >.git/worktrees/jlm/gitdir &&
-       rmdir zz &&
-       git worktree prune --verbose --expire=2.days.ago &&
-       test -d .git/worktrees/jlm
-'
-
-test_expect_success 'not prune proper checkouts' '
-       test_when_finished rm -r .git/worktrees &&
-       git worktree add --detach "$PWD/nop" master &&
-       git worktree prune &&
-       test -d .git/worktrees/nop
-'
-
-test_done
diff --git a/t/t2026-worktree-prune.sh b/t/t2026-worktree-prune.sh
new file mode 100755 (executable)
index 0000000..a0f1e3b
--- /dev/null
@@ -0,0 +1,96 @@
+#!/bin/sh
+
+test_description='prune $GIT_DIR/worktrees'
+
+. ./test-lib.sh
+
+test_expect_success initialize '
+       git commit --allow-empty -m init
+'
+
+test_expect_success 'worktree prune on normal repo' '
+       git worktree prune &&
+       test_must_fail git worktree prune abc
+'
+
+test_expect_success 'prune files inside $GIT_DIR/worktrees' '
+       mkdir .git/worktrees &&
+       : >.git/worktrees/abc &&
+       git worktree prune --verbose >actual &&
+       cat >expect <<EOF &&
+Removing worktrees/abc: not a valid directory
+EOF
+       test_i18ncmp expect actual &&
+       ! test -f .git/worktrees/abc &&
+       ! test -d .git/worktrees
+'
+
+test_expect_success 'prune directories without gitdir' '
+       mkdir -p .git/worktrees/def/abc &&
+       : >.git/worktrees/def/def &&
+       cat >expect <<EOF &&
+Removing worktrees/def: gitdir file does not exist
+EOF
+       git worktree prune --verbose >actual &&
+       test_i18ncmp expect actual &&
+       ! test -d .git/worktrees/def &&
+       ! test -d .git/worktrees
+'
+
+test_expect_success SANITY 'prune directories with unreadable gitdir' '
+       mkdir -p .git/worktrees/def/abc &&
+       : >.git/worktrees/def/def &&
+       : >.git/worktrees/def/gitdir &&
+       chmod u-r .git/worktrees/def/gitdir &&
+       git worktree prune --verbose >actual &&
+       test_i18ngrep "Removing worktrees/def: unable to read gitdir file" actual &&
+       ! test -d .git/worktrees/def &&
+       ! test -d .git/worktrees
+'
+
+test_expect_success 'prune directories with invalid gitdir' '
+       mkdir -p .git/worktrees/def/abc &&
+       : >.git/worktrees/def/def &&
+       : >.git/worktrees/def/gitdir &&
+       git worktree prune --verbose >actual &&
+       test_i18ngrep "Removing worktrees/def: invalid gitdir file" actual &&
+       ! test -d .git/worktrees/def &&
+       ! test -d .git/worktrees
+'
+
+test_expect_success 'prune directories with gitdir pointing to nowhere' '
+       mkdir -p .git/worktrees/def/abc &&
+       : >.git/worktrees/def/def &&
+       echo "$(pwd)"/nowhere >.git/worktrees/def/gitdir &&
+       git worktree prune --verbose >actual &&
+       test_i18ngrep "Removing worktrees/def: gitdir file points to non-existent location" actual &&
+       ! test -d .git/worktrees/def &&
+       ! test -d .git/worktrees
+'
+
+test_expect_success 'not prune locked checkout' '
+       test_when_finished rm -r .git/worktrees &&
+       mkdir -p .git/worktrees/ghi &&
+       : >.git/worktrees/ghi/locked &&
+       git worktree prune &&
+       test -d .git/worktrees/ghi
+'
+
+test_expect_success 'not prune recent checkouts' '
+       test_when_finished rm -r .git/worktrees &&
+       mkdir zz &&
+       mkdir -p .git/worktrees/jlm &&
+       echo "$(pwd)"/zz >.git/worktrees/jlm/gitdir &&
+       rmdir zz &&
+       git worktree prune --verbose --expire=2.days.ago &&
+       test -d .git/worktrees/jlm
+'
+
+test_expect_success 'not prune proper checkouts' '
+       test_when_finished rm -r .git/worktrees &&
+       git worktree add --detach "$PWD/nop" master &&
+       git worktree prune &&
+       test -d .git/worktrees/nop
+'
+
+test_done
index f51d0f3cadcb4f97f4cf9f2d79aad9ed401781d8..16efe7af03d210cb349337e978c6105cb22d80e8 100755 (executable)
@@ -106,6 +106,19 @@ EOF
        test_i18ncmp expect actual
 '
 
+test_expect_success 'git branch shows detached HEAD properly after checkout --detach' '
+       git checkout master &&
+       cat >expect <<EOF &&
+* (HEAD detached at $(git rev-parse --short HEAD^0))
+  branch-one
+  branch-two
+  master
+EOF
+       git checkout --detach &&
+       git branch >actual &&
+       test_i18ncmp expect actual
+'
+
 test_expect_success 'git branch shows detached HEAD properly after moving' '
        cat >expect <<EOF &&
 * (HEAD detached from $(git rev-parse --short HEAD))
index 8cffd35fb03d7ca5abbd1a229c6c8533f8c5e917..cd70274ea51ac5c5ba6669495b944da5b7b97431 100755 (executable)
@@ -1122,6 +1122,12 @@ test_expect_success 'git notes copy diagnoses too many or too few parameters' '
        test_must_fail git notes copy one two three
 '
 
+test_expect_success 'git notes get-ref expands refs/heads/master to refs/notes/refs/heads/master' '
+       test_unconfig core.notesRef &&
+       sane_unset GIT_NOTES_REF &&
+       test "$(git notes --ref=refs/heads/master get-ref)" = "refs/notes/refs/heads/master"
+'
+
 test_expect_success 'git notes get-ref (no overrides)' '
        test_unconfig core.notesRef &&
        sane_unset GIT_NOTES_REF &&
index d26e3f57dcbc18585c360ee78a725708f5a69207..3de0b1dcfdc9c5948c10e5e8c107a3820df9f357 100755 (executable)
@@ -1227,6 +1227,21 @@ test_expect_success 'static check of bad command' '
        test C = $(git cat-file commit HEAD^ | sed -ne \$p)
 '
 
+test_expect_success 'tabs and spaces are accepted in the todolist' '
+       rebase_setup_and_clean indented-comment &&
+       write_script add-indent.sh <<-\EOF &&
+       (
+               # Turn single spaces into space/tab mix
+               sed "1s/ /      /g; 2s/ /  /g; 3s/ /    /g" "$1"
+               printf "\n\t# comment\n #more\n\t # comment\n"
+       ) >$1.new
+       mv "$1.new" "$1"
+       EOF
+       test_set_editor "$(pwd)/add-indent.sh" &&
+       git rebase -i HEAD^^^ &&
+       test E = $(git cat-file commit HEAD | sed -ne \$p)
+'
+
 cat >expect <<EOF
 Warning: the SHA-1 is missing or isn't a commit in the following line:
  - edit XXXXXXX False commit
diff --git a/t/t5507-remote-environment.sh b/t/t5507-remote-environment.sh
new file mode 100755 (executable)
index 0000000..e614929
--- /dev/null
@@ -0,0 +1,34 @@
+#!/bin/sh
+
+test_description='check environment showed to remote side of transports'
+. ./test-lib.sh
+
+test_expect_success 'set up "remote" push situation' '
+       test_commit one &&
+       git config push.default current &&
+       git init remote
+'
+
+test_expect_success 'set up fake ssh' '
+       GIT_SSH_COMMAND="f() {
+               cd \"\$TRASH_DIRECTORY\" &&
+               eval \"\$2\"
+       }; f" &&
+       export GIT_SSH_COMMAND &&
+       export TRASH_DIRECTORY
+'
+
+# due to receive.denyCurrentBranch=true
+test_expect_success 'confirm default push fails' '
+       test_must_fail git push remote
+'
+
+test_expect_success 'config does not travel over same-machine push' '
+       test_must_fail git -c receive.denyCurrentBranch=false push remote
+'
+
+test_expect_success 'config does not travel over ssh push' '
+       test_must_fail git -c receive.denyCurrentBranch=false push host:remote
+'
+
+test_done
index aa73eeaef82adff56083fdc2d5d35d599b73edee..9fafcf194589218e28b894a7bd9e83c9a1893fbf 100755 (executable)
@@ -44,10 +44,6 @@ POST() {
        test_cmp exp act
 }
 
-log_div() {
-       return 0
-}
-
 . "$TEST_DIRECTORY"/t556x_common
 
 expect_aliased() {
index 19afe966986cdc72cf8fc23f113bd77a8128f382..90e0d6f0fe935970c0941bfef2af39bb15d2f959 100755 (executable)
@@ -29,15 +29,9 @@ POST() {
        test_cmp exp act
 }
 
-log_div() {
-       echo >>"$HTTPD_ROOT_PATH"/access.log
-       echo "###  $1" >>"$HTTPD_ROOT_PATH"/access.log
-       echo "###" >>"$HTTPD_ROOT_PATH"/access.log
-}
-
 . "$TEST_DIRECTORY"/t556x_common
 
-cat >exp <<EOF
+grep '^[^#]' >exp <<EOF
 
 ###  refs/heads/master
 ###
index 82926cfdb7b7c6a86ab7d73efdfa327a6be28c83..359fcfe32b66a2cd597778b58a45a937fa7656fa 100755 (executable)
@@ -52,21 +52,17 @@ get_static_files() {
 SMART=smart
 GIT_HTTP_EXPORT_ALL=1 && export GIT_HTTP_EXPORT_ALL
 test_expect_success 'direct refs/heads/master not found' '
-       log_div "refs/heads/master" &&
        GET refs/heads/master "404 Not Found"
 '
 test_expect_success 'static file is ok' '
-       log_div "getanyfile default" &&
        get_static_files "200 OK"
 '
 SMART=smart_noexport
 unset GIT_HTTP_EXPORT_ALL
 test_expect_success 'no export by default' '
-       log_div "no git-daemon-export-ok" &&
        get_static_files "404 Not Found"
 '
 test_expect_success 'export if git-daemon-export-ok' '
-       log_div "git-daemon-export-ok" &&
         (cd "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" &&
         touch git-daemon-export-ok
        ) &&
@@ -75,47 +71,39 @@ test_expect_success 'export if git-daemon-export-ok' '
 SMART=smart
 GIT_HTTP_EXPORT_ALL=1 && export GIT_HTTP_EXPORT_ALL
 test_expect_success 'static file if http.getanyfile true is ok' '
-       log_div "getanyfile true" &&
        config http.getanyfile true &&
        get_static_files "200 OK"
 '
 test_expect_success 'static file if http.getanyfile false fails' '
-       log_div "getanyfile false" &&
        config http.getanyfile false &&
        get_static_files "403 Forbidden"
 '
 
 test_expect_success 'http.uploadpack default enabled' '
-       log_div "uploadpack default" &&
        GET info/refs?service=git-upload-pack "200 OK"  &&
        POST git-upload-pack 0000 "200 OK"
 '
 test_expect_success 'http.uploadpack true' '
-       log_div "uploadpack true" &&
        config http.uploadpack true &&
        GET info/refs?service=git-upload-pack "200 OK" &&
        POST git-upload-pack 0000 "200 OK"
 '
 test_expect_success 'http.uploadpack false' '
-       log_div "uploadpack false" &&
        config http.uploadpack false &&
        GET info/refs?service=git-upload-pack "403 Forbidden" &&
        POST git-upload-pack 0000 "403 Forbidden"
 '
 
 test_expect_success 'http.receivepack default disabled' '
-       log_div "receivepack default" &&
        GET info/refs?service=git-receive-pack "403 Forbidden"  &&
        POST git-receive-pack 0000 "403 Forbidden"
 '
 test_expect_success 'http.receivepack true' '
-       log_div "receivepack true" &&
        config http.receivepack true &&
        GET info/refs?service=git-receive-pack "200 OK" &&
        POST git-receive-pack 0000 "200 OK"
 '
 test_expect_success 'http.receivepack false' '
-       log_div "receivepack false" &&
        config http.receivepack false &&
        GET info/refs?service=git-receive-pack "403 Forbidden" &&
        POST git-receive-pack 0000 "403 Forbidden"
index 63194d819efe07af241573662c660e6e92b503f5..5d7d4146179bb43184f74dd646aacbba11cc8c8b 100755 (executable)
@@ -30,4 +30,17 @@ test_expect_success 'gc -h with invalid configuration' '
        test_i18ngrep "[Uu]sage" broken/usage
 '
 
+test_expect_success 'gc is not aborted due to a stale symref' '
+       git init remote &&
+       (
+               cd remote &&
+               test_commit initial &&
+               git clone . ../client &&
+               git branch -m develop &&
+               cd ../client &&
+               git fetch --prune &&
+               git gc
+       )
+'
+
 test_done
index 855afda80a1b0dea6d74aa18a96018f59cb2e50b..377c648e04f55359eefa87cdf2ad0c06be0df171 100755 (executable)
@@ -2,6 +2,7 @@
 
 test_description='git filter-branch'
 . ./test-lib.sh
+. "$TEST_DIRECTORY/lib-gpg.sh"
 
 test_expect_success 'setup' '
        test_commit A &&
@@ -292,6 +293,19 @@ test_expect_success 'Tag name filtering strips gpg signature' '
        test_cmp expect actual
 '
 
+test_expect_success GPG 'Filtering retains message of gpg signed commit' '
+       mkdir gpg &&
+       touch gpg/foo &&
+       git add gpg &&
+       test_tick &&
+       git commit -S -m "Adding gpg" &&
+
+       git log -1 --format="%s" > expect &&
+       git filter-branch -f --msg-filter "cat" &&
+       git log -1 --format="%s" > actual &&
+       test_cmp expect actual
+'
+
 test_expect_success 'Tag name filtering allows slashes in tag names' '
        git tag -m tag-with-slash X/1 &&
        git cat-file tag X/1 | sed -e s,X/1,X/2, > expect &&
index 3dd3744a57cffd2a98be5cd551cda475c746e646..c67bf65b347810c576f80a0ac33e3b84f42e1516 100644 (file)
@@ -21,8 +21,6 @@ static int normalize_ceiling_entry(struct string_list_item *item, void *unused)
        if (normalize_path_copy(buf, ceil) < 0)
                die("Path \"%s\" could not be normalized", ceil);
        len = strlen(buf);
-       if (len > 1 && buf[len-1] == '/')
-               die("Normalized path \"%s\" ended with slash", buf);
        free(item->string);
        item->string = xstrdup(buf);
        return 1;
index c327fe8128fdb2e380db15f526056a22862ac33f..3e3b8c098924d655bccb395e95cee832abb1d39f 100644 (file)
@@ -1319,6 +1319,12 @@ static int grab_1st_switch(unsigned char *osha1, unsigned char *nsha1,
        hashcpy(cb->nsha1, nsha1);
        for (end = target; *end && *end != '\n'; end++)
                ;
+       if (!memcmp(target, "HEAD", end - target)) {
+               /* HEAD is relative. Resolve it to the right reflog entry. */
+               strbuf_addstr(&cb->buf,
+                             find_unique_abbrev(nsha1, DEFAULT_ABBREV));
+               return 1;
+       }
        strbuf_add(&cb->buf, target, end - target);
        return 1;
 }