Merge branch 'km/send-email-remove-cruft-in-address'
authorJunio C Hamano <gitster@pobox.com>
Thu, 29 Nov 2012 20:52:49 +0000 (12:52 -0800)
committerJunio C Hamano <gitster@pobox.com>
Thu, 29 Nov 2012 20:52:49 +0000 (12:52 -0800)
* km/send-email-remove-cruft-in-address:
git-send-email: allow edit invalid email address
git-send-email: ask what to do with an invalid email address
git-send-email: remove invalid addresses earlier
git-send-email: fix fallback code in extract_valid_address()
git-send-email: remove garbage after email address

33 files changed:
Documentation/RelNotes/1.8.0.2.txt [new file with mode: 0644]
Documentation/RelNotes/1.8.1.txt
Documentation/git-fast-import.txt
Documentation/git-push.txt
Documentation/technical/api-command.txt [new file with mode: 0644]
Makefile
builtin/commit.c
builtin/remote.c
builtin/rm.c
cache.h
contrib/completion/git-completion.bash
contrib/completion/git-completion.zsh [new file with mode: 0644]
contrib/emacs/git.el
contrib/mw-to-git/git-remote-mediawiki
contrib/mw-to-git/t/t9362-mw-to-git-utf8.sh
diffcore-pickaxe.c
git-send-email.perl
gitweb/gitweb.perl
ident.c
po/git.pot
po/sv.po
po/vi.po
remote.c
t/t0000-basic.sh
t/t0007-git-var.sh [new file with mode: 0755]
t/t2020-checkout-detach.sh
t/t3600-rm.sh
t/t4030-diff-textconv.sh
t/t7502-commit.sh
t/t9001-send-email.sh
t/t9902-completion.sh
t/test-lib-functions.sh
t/test-lib.sh
diff --git a/Documentation/RelNotes/1.8.0.2.txt b/Documentation/RelNotes/1.8.0.2.txt
new file mode 100644 (file)
index 0000000..5d08021
--- /dev/null
@@ -0,0 +1,15 @@
+Git v1.8.0.2 Release Notes
+==========================
+
+Fixes since v1.8.0.1
+--------------------
+
+ * "git p4" used to try expanding malformed "$keyword$" that spans
+   across multiple lines.
+
+ * "git update-ref -d --deref SYM" to delete a ref through a symbolic
+   ref that points to it did not remove it correctly.
+
+ * Syntax highlighting in "gitweb" was not quite working.
+
+Also contains other minor fixes and documentation updates.
index 34c5b26977a04647ffa0e1aa472dcaf8171f4d60..207043adca121f9941840c29b84f0271273473c6 100644 (file)
@@ -27,7 +27,7 @@ Updates since v1.8.0
 
 UI, Workflows & Features
 
- * Command-line completion for tcsh has been added.
+ * Command-line completion scripts for tcsh and zsh have been added.
 
  * We used to have a workaround for a bug in ancient "less" that
    causes it to exit without any output when the terminal is resized.
@@ -44,6 +44,11 @@ UI, Workflows & Features
    give the default number of context lines in the patch output, to
    override the hardcoded default of 3 lines.
 
+ * When "git checkout" checks out a branch, it tells the user how far
+   behind (or ahead) the new branch is relative to the remote tracking
+   branch it builds upon.  The message now also advises how to sync
+   them up by pushing or pulling.
+
  * "git config --get" used to diagnose presence of multiple
    definitions of the same variable in the same configuration file as
    an error, but it now applies the "last one wins" rule used by the
@@ -51,6 +56,10 @@ UI, Workflows & Features
    API regression but it is expected that nobody will notice it in
    practice.
 
+ * "git log -p -S<string>" now looks for the <string> after applying
+   the textconv filter (if defined); earlier it inspected the contents
+   of the blobs without filtering.
+
  * "git format-patch" learned the "--notes=<ref>" option to give
    notes for the commit after the three-dash lines in its output.
 
index 959e4d3aee2c616ec9b12cf84865ade2f2ef7206..d1844ead4a4883cc31447c20763b61091f66ed8e 100644 (file)
@@ -562,8 +562,12 @@ A `<path>` string must use UNIX-style directory separators (forward
 slash `/`), may contain any byte other than `LF`, and must not
 start with double quote (`"`).
 
-If an `LF` or double quote must be encoded into `<path>` shell-style
-quoting should be used, e.g. `"path/with\n and \" in it"`.
+A path can use C-style string quoting; this is accepted in all cases
+and mandatory if the filename starts with double quote or contains
+`LF`. In C-style quoting, the complete name should be surrounded with
+double quotes, and any `LF`, backslash, or double quote characters
+must be escaped by preceding them with a backslash (e.g.,
+`"path/with\n, \\ and \" in it"`).
 
 The value of `<path>` must be in canonical form. That is it must not:
 
index fe46c4258a9c8a9dbab0b789215716065bef00ad..6d19d59ce5a3a683c1af3b0541a5746faba116f9 100644 (file)
@@ -286,7 +286,8 @@ leading to commit A.  The history looks like this:
 ----------------
 
 Further suppose that the other person already pushed changes leading to A
-back to the original repository you two obtained the original commit X.
+back to the original repository from which you two obtained the original
+commit X.
 
 The push done by the other person updated the branch that used to point at
 commit X to point at commit A.  It is a fast-forward.
diff --git a/Documentation/technical/api-command.txt b/Documentation/technical/api-command.txt
new file mode 100644 (file)
index 0000000..ea9b2ed
--- /dev/null
@@ -0,0 +1,99 @@
+Integrating new subcommands
+===========================
+
+This is how-to documentation for people who want to add extension
+commands to git.  It should be read alongside api-builtin.txt.
+
+Runtime environment
+-------------------
+
+git subcommands are standalone executables that live in the git exec
+path, normally /usr/lib/git-core.  The git executable itself is a
+thin wrapper that knows where the subcommands live, and runs them by
+passing command-line arguments to them.
+
+(If "git foo" is not found in the git exec path, the wrapper
+will look in the rest of your $PATH for it.  Thus, it's possible
+to write local git extensions that don't live in system space.)
+
+Implementation languages
+------------------------
+
+Most subcommands are written in C or shell.  A few are written in
+Perl.
+
+While we strongly encourage coding in portable C for portability,
+these specific scripting languages are also acceptable.  We won't
+accept more without a very strong technical case, as we don't want
+to broaden the git suite's required dependencies.  Import utilities,
+surgical tools, remote helpers and other code at the edges of the
+git suite are more lenient and we allow Python (and even Tcl/tk),
+but they should not be used for core functions.
+
+This may change in the future.  Especially Python is not allowed in
+core because we need better Python integration in the git Windows
+installer before we can be confident people in that environment
+won't experience an unacceptably large loss of capability.
+
+C commands are normally written as single modules, named after the
+command, that link a collection of functions called libgit.  Thus,
+your command 'git-foo' would normally be implemented as a single
+"git-foo.c" (or "builtin/foo.c" if it is to be linked to the main
+binary); this organization makes it easy for people reading the code
+to find things.
+
+See the CodingGuidelines document for other guidance on what we consider
+good practice in C and shell, and api-builtin.txt for the support
+functions available to built-in commands written in C.
+
+What every extension command needs
+----------------------------------
+
+You must have a man page, written in asciidoc (this is what git help
+followed by your subcommand name will display).  Be aware that there is
+a local asciidoc configuration and macros which you should use.  It's
+often helpful to start by cloning an existing page and replacing the
+text content.
+
+You must have a test, written to report in TAP (Test Anything Protocol).
+Tests are executables (usually shell scripts) that live in the 't'
+subdirectory of the tree.  Each test name begins with 't' and a sequence
+number that controls where in the test sequence it will be executed;
+conventionally the rest of the name stem is that of the command
+being tested.
+
+Read the file t/README to learn more about the conventions to be used
+in writing tests, and the test support library.
+
+Integrating a command
+---------------------
+
+Here are the things you need to do when you want to merge a new
+subcommand into the git tree.
+
+0. Don't forget to sign off your patch!
+
+1. Append your command name to one of the variables BUILTIN_OBJS,
+EXTRA_PROGRAMS, SCRIPT_SH, SCRIPT_PERL or SCRIPT_PYTHON.
+
+2. Drop its test in the t directory.
+
+3. If your command is implemented in an interpreted language with a
+p-code intermediate form, make sure .gitignore in the main directory
+includes a pattern entry that ignores such files.  Python .pyc and
+.pyo files will already be covered.
+
+4. If your command has any dependency on a particular version of
+your language, document it in the INSTALL file.
+
+5. There is a file command-list.txt in the distribution main directory
+that categorizes commands by type, so they can be listed in appropriate
+subsections in the documentation's summary command list.  Add an entry
+for yours.  To understand the categories, look at git-cmmands.txt
+in the main directory.
+
+6. Give the maintainer one paragraph to include in the RelNotes file
+to describe the new feature; a good place to do so is in the cover
+letter [PATCH 0/n].
+
+That's all there is to it.
index 9bc5e403650d171f1b5e5a6868fdd66009739b7d..4ad6fbd64e5cea1ff833f142ec0072566039bc49 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1573,7 +1573,7 @@ else
        REMOTE_CURL_NAMES = $(REMOTE_CURL_PRIMARY) $(REMOTE_CURL_ALIASES)
        PROGRAM_OBJS += http-fetch.o
        PROGRAMS += $(REMOTE_CURL_NAMES)
-       curl_check := $(shell (echo 070908; curl-config --vernum) | sort -r | sed -ne 2p)
+       curl_check := $(shell (echo 070908; curl-config --vernum) 2>/dev/null | sort -r | sed -ne 2p)
        ifeq "$(curl_check)" "070908"
                ifndef NO_EXPAT
                        PROGRAM_OBJS += http-push.o
index 1dd2ec5e6f878c02e2858d72f08d8b88d67bcd85..d6dd3df8b1e1f449e7781bdb033f5cfa11753436 100644 (file)
@@ -755,7 +755,7 @@ static int prepare_to_commit(const char *index_file, const char *prefix,
                                ident_shown++ ? "" : "\n",
                                author_ident->buf);
 
-               if (!user_ident_sufficiently_given())
+               if (!committer_ident_sufficiently_given())
                        status_printf_ln(s, GIT_COLOR_NORMAL,
                                _("%s"
                                "Committer: %s"),
@@ -1265,7 +1265,7 @@ static void print_summary(const char *prefix, const unsigned char *sha1,
                strbuf_addstr(&format, "\n Author: ");
                strbuf_addbuf_percentquote(&format, &author_ident);
        }
-       if (!user_ident_sufficiently_given()) {
+       if (!committer_ident_sufficiently_given()) {
                strbuf_addstr(&format, "\n Committer: ");
                strbuf_addbuf_percentquote(&format, &committer_ident);
                if (advice_implicit_identity) {
index a5a4b232310a27c1d67dd6a1bce252cd62cfa52d..937484d7c77c448995481f246c1afe2dedd4c561 100644 (file)
@@ -39,7 +39,7 @@ static const char * const builtin_remote_rm_usage[] = {
 };
 
 static const char * const builtin_remote_sethead_usage[] = {
-       N_("git remote set-head <name> (-a | -d | <branch>])"),
+       N_("git remote set-head <name> (-a | -d | <branch>)"),
        NULL
 };
 
index 2aea3b565318e11bdcc63f175631388f4f20ba44..dabfcf689068804f2b352d200b35770b467a27e8 100644 (file)
@@ -234,6 +234,21 @@ int cmd_rm(int argc, const char **argv, const char *prefix)
        if (read_cache() < 0)
                die(_("index file corrupt"));
 
+       /*
+        * Drop trailing directory separators from directories so we'll find
+        * submodules in the index.
+        */
+       for (i = 0; i < argc; i++) {
+               size_t pathlen = strlen(argv[i]);
+               if (pathlen && is_dir_sep(argv[i][pathlen - 1]) &&
+                   is_directory(argv[i])) {
+                       do {
+                               pathlen--;
+                       } while (pathlen && is_dir_sep(argv[i][pathlen - 1]));
+                       argv[i] = xmemdupz(argv[i], pathlen);
+               }
+       }
+
        pathspec = get_pathspec(prefix, argv);
        refresh_index(&the_index, REFRESH_QUIET, pathspec, NULL, NULL);
 
diff --git a/cache.h b/cache.h
index dbd8018b5827ce40fd72ac0ba84934551a11f225..18fdd18f3674b1d7c62de65509bdb7bc57743395 100644 (file)
--- a/cache.h
+++ b/cache.h
@@ -1149,11 +1149,8 @@ struct config_include_data {
 #define CONFIG_INCLUDE_INIT { 0 }
 extern int git_config_include(const char *name, const char *value, void *data);
 
-#define IDENT_NAME_GIVEN 01
-#define IDENT_MAIL_GIVEN 02
-#define IDENT_ALL_GIVEN (IDENT_NAME_GIVEN|IDENT_MAIL_GIVEN)
-extern int user_ident_explicitly_given;
-extern int user_ident_sufficiently_given(void);
+extern int committer_ident_sufficiently_given(void);
+extern int author_ident_sufficiently_given(void);
 
 extern const char *git_commit_encoding;
 extern const char *git_log_output_encoding;
index 0960acc58680b97a6cc0cf22fe7980d8758c6ee4..0b77eb1fa4074fb8ed5ef4cd4c37513f49804e7e 100644 (file)
 #    3) Consider changing your PS1 to also show the current branch,
 #       see git-prompt.sh for details.
 
-if [[ -n ${ZSH_VERSION-} ]]; then
-       autoload -U +X bashcompinit && bashcompinit
-fi
-
 case "$COMP_WORDBREAKS" in
 *:*) : great ;;
 *)   COMP_WORDBREAKS="$COMP_WORDBREAKS:"
@@ -169,7 +165,6 @@ __git_reassemble_comp_words_by_ref()
 }
 
 if ! type _get_comp_words_by_ref >/dev/null 2>&1; then
-if [[ -z ${ZSH_VERSION:+set} ]]; then
 _get_comp_words_by_ref ()
 {
        local exclude cur_ words_ cword_
@@ -197,32 +192,6 @@ _get_comp_words_by_ref ()
                shift
        done
 }
-else
-_get_comp_words_by_ref ()
-{
-       while [ $# -gt 0 ]; do
-               case "$1" in
-               cur)
-                       cur=${COMP_WORDS[COMP_CWORD]}
-                       ;;
-               prev)
-                       prev=${COMP_WORDS[COMP_CWORD-1]}
-                       ;;
-               words)
-                       words=("${COMP_WORDS[@]}")
-                       ;;
-               cword)
-                       cword=$COMP_CWORD
-                       ;;
-               -n)
-                       # assume COMP_WORDBREAKS is already set sanely
-                       shift
-                       ;;
-               esac
-               shift
-       done
-}
-fi
 fi
 
 # Generates completion reply with compgen, appending a space to possible
@@ -989,6 +958,8 @@ _git_clone ()
                        --upload-pack
                        --template=
                        --depth
+                       --single-branch
+                       --branch
                        "
                return
                ;;
@@ -2430,20 +2401,71 @@ __gitk_main ()
        __git_complete_revlist
 }
 
-__git_func_wrap ()
-{
-       if [[ -n ${ZSH_VERSION-} ]]; then
-               emulate -L bash
-               setopt KSH_TYPESET
+if [[ -n ${ZSH_VERSION-} ]]; then
+       echo "WARNING: this script is deprecated, please see git-completion.zsh" 1>&2
 
-               # workaround zsh's bug that leaves 'words' as a special
-               # variable in versions < 4.3.12
-               typeset -h words
+       autoload -U +X compinit && compinit
 
-               # workaround zsh's bug that quotes spaces in the COMPREPLY
-               # array if IFS doesn't contain spaces.
-               typeset -h IFS
-       fi
+       __gitcomp ()
+       {
+               emulate -L zsh
+
+               local cur_="${3-$cur}"
+
+               case "$cur_" in
+               --*=)
+                       ;;
+               *)
+                       local c IFS=$' \t\n'
+                       local -a array
+                       for c in ${=1}; do
+                               c="$c${4-}"
+                               case $c in
+                               --*=*|*.) ;;
+                               *) c="$c " ;;
+                               esac
+                               array+=("$c")
+                       done
+                       compset -P '*[=:]'
+                       compadd -Q -S '' -p "${2-}" -a -- array && _ret=0
+                       ;;
+               esac
+       }
+
+       __gitcomp_nl ()
+       {
+               emulate -L zsh
+
+               local IFS=$'\n'
+               compset -P '*[=:]'
+               compadd -Q -S "${4- }" -p "${2-}" -- ${=1} && _ret=0
+       }
+
+       __git_zsh_helper ()
+       {
+               emulate -L ksh
+               local cur cword prev
+               cur=${words[CURRENT-1]}
+               prev=${words[CURRENT-2]}
+               let cword=CURRENT-1
+               __${service}_main
+       }
+
+       _git ()
+       {
+               emulate -L zsh
+               local _ret=1
+               __git_zsh_helper
+               let _ret && _default -S '' && _ret=0
+               return _ret
+       }
+
+       compdef _git git gitk
+       return
+fi
+
+__git_func_wrap ()
+{
        local cur words cword prev
        _get_comp_words_by_ref -n =: cur words cword prev
        $1
diff --git a/contrib/completion/git-completion.zsh b/contrib/completion/git-completion.zsh
new file mode 100644 (file)
index 0000000..4577502
--- /dev/null
@@ -0,0 +1,78 @@
+#compdef git gitk
+
+# zsh completion wrapper for git
+#
+# You need git's bash completion script installed somewhere, by default on the
+# same directory as this script.
+#
+# If your script is on ~/.git-completion.sh instead, you can configure it on
+# your ~/.zshrc:
+#
+#  zstyle ':completion:*:*:git:*' script ~/.git-completion.sh
+#
+# The recommended way to install this script is to copy to
+# '~/.zsh/completion/_git', and then add the following to your ~/.zshrc file:
+#
+#  fpath=(~/.zsh/completion $fpath)
+
+complete ()
+{
+       # do nothing
+       return 0
+}
+
+zstyle -s ":completion:*:*:git:*" script script
+test -z "$script" && script="$(dirname ${funcsourcetrace[1]%:*})"/git-completion.bash
+ZSH_VERSION='' . "$script"
+
+__gitcomp ()
+{
+       emulate -L zsh
+
+       local cur_="${3-$cur}"
+
+       case "$cur_" in
+       --*=)
+               ;;
+       *)
+               local c IFS=$' \t\n'
+               local -a array
+               for c in ${=1}; do
+                       c="$c${4-}"
+                       case $c in
+                       --*=*|*.) ;;
+                       *) c="$c " ;;
+                       esac
+                       array+=("$c")
+               done
+               compset -P '*[=:]'
+               compadd -Q -S '' -p "${2-}" -a -- array && _ret=0
+               ;;
+       esac
+}
+
+__gitcomp_nl ()
+{
+       emulate -L zsh
+
+       local IFS=$'\n'
+       compset -P '*[=:]'
+       compadd -Q -S "${4- }" -p "${2-}" -- ${=1} && _ret=0
+}
+
+_git ()
+{
+       local _ret=1
+       () {
+               emulate -L ksh
+               local cur cword prev
+               cur=${words[CURRENT-1]}
+               prev=${words[CURRENT-2]}
+               let cword=CURRENT-1
+               __${service}_main
+       }
+       let _ret && _default -S '' && _ret=0
+       return _ret
+}
+
+_git
index 65c95d9d5a6e00e376a75bdad2194ec9d6539667..5ffc506f6d7e3e1b4c0a0919b1d2e9beb141444f 100644 (file)
@@ -1671,7 +1671,7 @@ Commands:
   "Entry point into git-status mode."
   (interactive "DSelect directory: ")
   (setq dir (git-get-top-dir dir))
-  (if (file-directory-p (concat (file-name-as-directory dir) ".git"))
+  (if (file-exists-p (concat (file-name-as-directory dir) ".git"))
       (let ((buffer (or (and git-reuse-status-buffer (git-find-status-buffer dir))
                         (create-file-buffer (expand-file-name "*git-status*" dir)))))
         (switch-to-buffer buffer)
index 68555d426540d710b5220168c9fa8eee9f946219..094129de09ca92643d98f34f20a35479089bcbcb 100755 (executable)
@@ -711,6 +711,14 @@ sub fetch_mw_revisions {
        return ($n, @revisions);
 }
 
+sub fe_escape_path {
+    my $path = shift;
+    $path =~ s/\\/\\\\/g;
+    $path =~ s/"/\\"/g;
+    $path =~ s/\n/\\n/g;
+    return '"' . $path . '"';
+}
+
 sub import_file_revision {
        my $commit = shift;
        my %commit = %{$commit};
@@ -738,15 +746,17 @@ sub import_file_revision {
                print STDOUT "from refs/mediawiki/$remotename/master^0\n";
        }
        if ($content ne DELETED_CONTENT) {
-               print STDOUT "M 644 inline $title.mw\n";
+               print STDOUT "M 644 inline " .
+                   fe_escape_path($title . ".mw") . "\n";
                literal_data($content);
                if (%mediafile) {
-                       print STDOUT "M 644 inline $mediafile{title}\n";
+                       print STDOUT "M 644 inline "
+                           . fe_escape_path($mediafile{title}) . "\n";
                        literal_data_raw($mediafile{content});
                }
                print STDOUT "\n\n";
        } else {
-               print STDOUT "D $title.mw\n";
+               print STDOUT "D " . fe_escape_path($title . ".mw") . "\n";
        }
 
        # mediawiki revision number in the git note
index 246d47d8fb4e6aa141e1aa5b10b63bbb179fd73e..b6405ce2628480240fc92ac5d69307991f2d5c69 100755 (executable)
@@ -318,4 +318,30 @@ test_expect_success 'git push with \ in format control' '
 '
 
 
+test_expect_success 'fast-import meta-characters in page name (mw -> git)' '
+       wiki_reset &&
+       wiki_editpage \"file\"_\\_foo "expect to be called \"file\"_\\_foo" false &&
+       git clone mediawiki::'"$WIKI_URL"' mw_dir_21 &&
+       test_path_is_file mw_dir_21/\"file\"_\\_foo.mw &&
+       wiki_getallpage ref_page_21 &&
+       test_diff_directories mw_dir_21 ref_page_21
+'
+
+
+test_expect_success 'fast-import meta-characters in page name (git -> mw) ' '
+       wiki_reset &&
+       git clone mediawiki::'"$WIKI_URL"' mw_dir_22 &&
+       (
+               cd mw_dir_22 &&
+               echo "this file is called \"file\"_\\_foo.mw" >\"file\"_\\_foo &&
+               git add . &&
+               git commit -am "file \"file\"_\\_foo" &&
+               git pull &&
+               git push
+       ) &&
+       wiki_getallpage ref_page_22 &&
+       test_diff_directories mw_dir_22 ref_page_22
+'
+
+
 test_done
index a20937635435f6672f801454c992cbeeb8d17a1a..b097fa766177f90e4b7983789a9286506664b2fd 100644 (file)
@@ -157,19 +157,15 @@ static void diffcore_pickaxe_grep(struct diff_options *o)
        return;
 }
 
-static unsigned int contains(struct diff_filespec *one, struct diff_options *o,
+static unsigned int contains(mmfile_t *mf, struct diff_options *o,
                             regex_t *regexp, kwset_t kws)
 {
        unsigned int cnt;
        unsigned long sz;
        const char *data;
-       if (!o->pickaxe[0])
-               return 0;
-       if (diff_populate_filespec(one, 0))
-               return 0;
 
-       sz = one->size;
-       data = one->data;
+       sz = mf->size;
+       data = mf->ptr;
        cnt = 0;
 
        if (regexp) {
@@ -199,26 +195,53 @@ static unsigned int contains(struct diff_filespec *one, struct diff_options *o,
                        cnt++;
                }
        }
-       diff_free_filespec_data(one);
        return cnt;
 }
 
 static int has_changes(struct diff_filepair *p, struct diff_options *o,
                       regex_t *regexp, kwset_t kws)
 {
-       if (!DIFF_FILE_VALID(p->one)) {
-               if (!DIFF_FILE_VALID(p->two))
-                       return 0; /* ignore unmerged */
+       struct userdiff_driver *textconv_one = get_textconv(p->one);
+       struct userdiff_driver *textconv_two = get_textconv(p->two);
+       mmfile_t mf1, mf2;
+       int ret;
+
+       if (!o->pickaxe[0])
+               return 0;
+
+       /*
+        * If we have an unmodified pair, we know that the count will be the
+        * same and don't even have to load the blobs. Unless textconv is in
+        * play, _and_ we are using two different textconv filters (e.g.,
+        * because a pair is an exact rename with different textconv attributes
+        * for each side, which might generate different content).
+        */
+       if (textconv_one == textconv_two && diff_unmodified_pair(p))
+               return 0;
+
+       fill_one(p->one, &mf1, &textconv_one);
+       fill_one(p->two, &mf2, &textconv_two);
+
+       if (!mf1.ptr) {
+               if (!mf2.ptr)
+                       ret = 0; /* ignore unmerged */
                /* created */
-               return contains(p->two, o, regexp, kws) != 0;
-       }
-       if (!DIFF_FILE_VALID(p->two))
-               return contains(p->one, o, regexp, kws) != 0;
-       if (!diff_unmodified_pair(p)) {
-               return contains(p->one, o, regexp, kws) !=
-                      contains(p->two, o, regexp, kws);
+               ret = contains(&mf2, o, regexp, kws) != 0;
        }
-       return 0;
+       else if (!mf2.ptr) /* removed */
+               ret = contains(&mf1, o, regexp, kws) != 0;
+       else
+               ret = contains(&mf1, o, regexp, kws) !=
+                     contains(&mf2, o, regexp, kws);
+
+       if (textconv_one)
+               free(mf1.ptr);
+       if (textconv_two)
+               free(mf2.ptr);
+       diff_free_filespec_data(p->one);
+       diff_free_filespec_data(p->two);
+
+       return ret;
 }
 
 static void diffcore_pickaxe_count(struct diff_options *o)
index f3bbc166d6fff82add7e61d0d4cb9d68a2007e34..94c7f76a156f1eaa4c622db267710f2982cf7826 100755 (executable)
@@ -753,16 +753,11 @@ sub file_declares_8bit_cte {
        }
 }
 
-my $prompting = 0;
 if (!defined $sender) {
        $sender = $repoauthor || $repocommitter || '';
-       $sender = ask("Who should the emails appear to be from? [$sender] ",
-                     default => $sender,
-                     valid_re => qr/\@.*\./, confirm_only => 1);
-       print "Emails will be sent from: ", $sender, "\n";
-       $prompting++;
 }
 
+my $prompting = 0;
 if (!@initial_to && !defined $to_cmd) {
        my $to = ask("Who should the emails be sent to (if any)? ",
                     default => "",
index e8812fa2b9145cf669193b2b148a0a8e6ee7ac09..0f207f2e20b0c3c30e62c1fd6f0526d38868776f 100755 (executable)
@@ -540,7 +540,7 @@ sub evaluate_uri {
        # $feature{'remote_heads'}{'default'} = [1];
        # To have project specific config enable override in $GITWEB_CONFIG
        # $feature{'remote_heads'}{'override'} = 1;
-       # and in project config gitweb.remote_heads = 0|1;
+       # and in project config gitweb.remoteheads = 0|1;
        'remote_heads' => {
                'sub' => sub { feature_bool('remote_heads', @_) },
                'override' => 0,
@@ -2696,12 +2696,15 @@ sub git_get_project_config {
        # only subsection, if exists, is case sensitive,
        # and not lowercased by 'git config -z -l'
        if (my ($hi, $mi, $lo) = ($key =~ /^([^.]*)\.(.*)\.([^.]*)$/)) {
+               $lo =~ s/_//g;
                $key = join(".", lc($hi), $mi, lc($lo));
+               return if ($lo =~ /\W/ || $hi =~ /\W/);
        } else {
                $key = lc($key);
+               $key =~ s/_//g;
+               return if ($key =~ /\W/);
        }
        $key =~ s/^gitweb\.//;
-       return if ($key =~ m/\W/);
 
        # type sanity check
        if (defined $type) {
diff --git a/ident.c b/ident.c
index a4bf206e2f88da3a7ee31a04c5c0dda2b1547baa..ac9672f607909111167559e3aa58e1585f05d0d8 100644 (file)
--- a/ident.c
+++ b/ident.c
 static struct strbuf git_default_name = STRBUF_INIT;
 static struct strbuf git_default_email = STRBUF_INIT;
 static char git_default_date[50];
-int user_ident_explicitly_given;
+
+#define IDENT_NAME_GIVEN 01
+#define IDENT_MAIL_GIVEN 02
+#define IDENT_ALL_GIVEN (IDENT_NAME_GIVEN|IDENT_MAIL_GIVEN)
+static int committer_ident_explicitly_given;
+static int author_ident_explicitly_given;
 
 #ifdef NO_GECOS_IN_PWENT
 #define get_gecos(ignored) "&"
@@ -109,7 +114,8 @@ const char *ident_default_email(void)
 
                if (email && email[0]) {
                        strbuf_addstr(&git_default_email, email);
-                       user_ident_explicitly_given |= IDENT_MAIL_GIVEN;
+                       committer_ident_explicitly_given |= IDENT_MAIL_GIVEN;
+                       author_ident_explicitly_given |= IDENT_MAIL_GIVEN;
                } else
                        copy_email(xgetpwuid_self(), &git_default_email);
                strbuf_trim(&git_default_email);
@@ -327,6 +333,10 @@ const char *fmt_name(const char *name, const char *email)
 
 const char *git_author_info(int flag)
 {
+       if (getenv("GIT_AUTHOR_NAME"))
+               author_ident_explicitly_given |= IDENT_NAME_GIVEN;
+       if (getenv("GIT_AUTHOR_EMAIL"))
+               author_ident_explicitly_given |= IDENT_MAIL_GIVEN;
        return fmt_ident(getenv("GIT_AUTHOR_NAME"),
                         getenv("GIT_AUTHOR_EMAIL"),
                         getenv("GIT_AUTHOR_DATE"),
@@ -336,16 +346,16 @@ const char *git_author_info(int flag)
 const char *git_committer_info(int flag)
 {
        if (getenv("GIT_COMMITTER_NAME"))
-               user_ident_explicitly_given |= IDENT_NAME_GIVEN;
+               committer_ident_explicitly_given |= IDENT_NAME_GIVEN;
        if (getenv("GIT_COMMITTER_EMAIL"))
-               user_ident_explicitly_given |= IDENT_MAIL_GIVEN;
+               committer_ident_explicitly_given |= IDENT_MAIL_GIVEN;
        return fmt_ident(getenv("GIT_COMMITTER_NAME"),
                         getenv("GIT_COMMITTER_EMAIL"),
                         getenv("GIT_COMMITTER_DATE"),
                         flag);
 }
 
-int user_ident_sufficiently_given(void)
+static int ident_is_sufficient(int user_ident_explicitly_given)
 {
 #ifndef WINDOWS
        return (user_ident_explicitly_given & IDENT_MAIL_GIVEN);
@@ -354,6 +364,16 @@ int user_ident_sufficiently_given(void)
 #endif
 }
 
+int committer_ident_sufficiently_given(void)
+{
+       return ident_is_sufficient(committer_ident_explicitly_given);
+}
+
+int author_ident_sufficiently_given(void)
+{
+       return ident_is_sufficient(author_ident_explicitly_given);
+}
+
 int git_ident_config(const char *var, const char *value, void *data)
 {
        if (!strcmp(var, "user.name")) {
@@ -361,7 +381,8 @@ int git_ident_config(const char *var, const char *value, void *data)
                        return config_error_nonbool(var);
                strbuf_reset(&git_default_name);
                strbuf_addstr(&git_default_name, value);
-               user_ident_explicitly_given |= IDENT_NAME_GIVEN;
+               committer_ident_explicitly_given |= IDENT_NAME_GIVEN;
+               author_ident_explicitly_given |= IDENT_NAME_GIVEN;
                return 0;
        }
 
@@ -370,7 +391,8 @@ int git_ident_config(const char *var, const char *value, void *data)
                        return config_error_nonbool(var);
                strbuf_reset(&git_default_email);
                strbuf_addstr(&git_default_email, value);
-               user_ident_explicitly_given |= IDENT_MAIL_GIVEN;
+               committer_ident_explicitly_given |= IDENT_MAIL_GIVEN;
+               author_ident_explicitly_given |= IDENT_MAIL_GIVEN;
                return 0;
        }
 
index e5611581e65c561cfd90de0a0fec5f22043f21f0..009eacba27c300e8a84b98541e22b14726896188 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2012-10-16 08:38+0800\n"
+"POT-Creation-Date: 2012-11-23 14:27+0800\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -60,7 +60,7 @@ msgstr ""
 msgid "archive format"
 msgstr ""
 
-#: archive.c:323 builtin/log.c:1079
+#: archive.c:323 builtin/log.c:1084
 msgid "prefix"
 msgstr ""
 
@@ -68,9 +68,9 @@ msgstr ""
 msgid "prepend prefix to each pathname in the archive"
 msgstr ""
 
-#: archive.c:325 builtin/archive.c:91 builtin/blame.c:2389
-#: builtin/blame.c:2390 builtin/config.c:56 builtin/fast-export.c:642
-#: builtin/fast-export.c:644 builtin/grep.c:801 builtin/hash-object.c:77
+#: archive.c:325 builtin/archive.c:91 builtin/blame.c:2390
+#: builtin/blame.c:2391 builtin/config.c:55 builtin/fast-export.c:642
+#: builtin/fast-export.c:644 builtin/grep.c:715 builtin/hash-object.c:77
 #: builtin/ls-files.c:494 builtin/ls-files.c:497 builtin/notes.c:540
 #: builtin/notes.c:697 builtin/read-tree.c:107 parse-options.h:149
 msgid "file"
@@ -120,6 +120,12 @@ msgstr ""
 msgid "path to the remote git-upload-archive command"
 msgstr ""
 
+#: attr.c:259
+msgid ""
+"Negative patterns are forbidden in git attributes\n"
+"Use '\\!' for literal leading exclamation."
+msgstr ""
+
 #: bundle.c:36
 #, c-format
 msgid "'%s' does not look like a v2 bundle file"
@@ -130,7 +136,7 @@ msgstr ""
 msgid "unrecognized header: %s%s (%d)"
 msgstr ""
 
-#: bundle.c:89 builtin/commit.c:672
+#: bundle.c:89 builtin/commit.c:674
 #, c-format
 msgid "could not open '%s'"
 msgstr ""
@@ -140,7 +146,7 @@ msgid "Repository lacks these prerequisite commits:"
 msgstr ""
 
 #: bundle.c:164 sequencer.c:562 sequencer.c:994 builtin/log.c:290
-#: builtin/log.c:727 builtin/log.c:1313 builtin/log.c:1529 builtin/merge.c:347
+#: builtin/log.c:732 builtin/log.c:1319 builtin/log.c:1535 builtin/merge.c:347
 #: builtin/shortlog.c:181
 msgid "revision walk setup failed"
 msgstr ""
@@ -167,7 +173,7 @@ msgstr[1] ""
 msgid "rev-list died"
 msgstr ""
 
-#: bundle.c:300 builtin/log.c:1209 builtin/shortlog.c:284
+#: bundle.c:300 builtin/log.c:1215 builtin/shortlog.c:284
 #, c-format
 msgid "unrecognized argument: %s"
 msgstr ""
@@ -293,24 +299,24 @@ msgid_plural "%lu years ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: diff.c:105
+#: diff.c:111
 #, c-format
-msgid "  Failed to parse dirstat cut-off percentage '%.*s'\n"
+msgid "  Failed to parse dirstat cut-off percentage '%s'\n"
 msgstr ""
 
-#: diff.c:110
+#: diff.c:116
 #, c-format
-msgid "  Unknown dirstat parameter '%.*s'\n"
+msgid "  Unknown dirstat parameter '%s'\n"
 msgstr ""
 
-#: diff.c:210
+#: diff.c:219
 #, c-format
 msgid ""
 "Found errors in 'diff.dirstat' config variable:\n"
 "%s"
 msgstr ""
 
-#: diff.c:3458
+#: diff.c:3467
 #, c-format
 msgid ""
 "Failed to parse --dirstat/-X option parameter:\n"
@@ -329,17 +335,17 @@ msgstr ""
 msgid "gpg failed to sign the data"
 msgstr ""
 
-#: grep.c:1441
+#: grep.c:1622
 #, c-format
 msgid "'%s': unable to read %s"
 msgstr ""
 
-#: grep.c:1458
+#: grep.c:1639
 #, c-format
 msgid "'%s': %s"
 msgstr ""
 
-#: grep.c:1469
+#: grep.c:1650
 #, c-format
 msgid "'%s': short read %s"
 msgstr ""
@@ -391,6 +397,15 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+#: merge.c:56
+msgid "failed to read the cache"
+msgstr ""
+
+#: merge.c:110 builtin/checkout.c:333 builtin/checkout.c:534
+#: builtin/clone.c:586
+msgid "unable to write new index file"
+msgstr ""
+
 #: merge-recursive.c:190
 #, c-format
 msgid "(bad commit)\n"
@@ -563,7 +578,7 @@ msgstr ""
 msgid "Auto-merging %s"
 msgstr ""
 
-#: merge-recursive.c:1633 git-submodule.sh:869
+#: merge-recursive.c:1633 git-submodule.sh:893
 msgid "submodule"
 msgstr ""
 
@@ -633,7 +648,7 @@ msgstr ""
 msgid "Could not parse object '%s'"
 msgstr ""
 
-#: merge-recursive.c:2009 builtin/merge.c:696
+#: merge-recursive.c:2009 builtin/merge.c:643
 msgid "Unable to write index."
 msgstr ""
 
@@ -684,14 +699,14 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
-#: sequencer.c:123 builtin/merge.c:864 builtin/merge.c:977
-#: builtin/merge.c:1087 builtin/merge.c:1097
+#: sequencer.c:123 builtin/merge.c:761 builtin/merge.c:874 builtin/merge.c:984
+#: builtin/merge.c:994
 #, c-format
 msgid "Could not open '%s' for writing"
 msgstr ""
 
-#: sequencer.c:125 builtin/merge.c:333 builtin/merge.c:867
-#: builtin/merge.c:1089 builtin/merge.c:1102
+#: sequencer.c:125 builtin/merge.c:333 builtin/merge.c:764 builtin/merge.c:986
+#: builtin/merge.c:999
 #, c-format
 msgid "Could not write to '%s'"
 msgstr ""
@@ -1299,7 +1314,7 @@ msgstr ""
 msgid "unexpected diff status %c"
 msgstr ""
 
-#: builtin/add.c:67 builtin/commit.c:230
+#: builtin/add.c:67 builtin/commit.c:231
 msgid "updating files failed"
 msgstr ""
 
@@ -1317,7 +1332,7 @@ msgstr ""
 msgid "Unstaged changes after refreshing the index:"
 msgstr ""
 
-#: builtin/add.c:195 builtin/add.c:460 builtin/rm.c:186
+#: builtin/add.c:195 builtin/add.c:460 builtin/rm.c:260
 #, c-format
 msgid "pathspec '%s' did not match any files"
 msgstr ""
@@ -1360,12 +1375,12 @@ msgstr ""
 
 #: builtin/add.c:319 builtin/clean.c:52 builtin/fetch.c:78 builtin/mv.c:63
 #: builtin/prune-packed.c:76 builtin/push.c:388 builtin/remote.c:1253
-#: builtin/rm.c:133
+#: builtin/rm.c:206
 msgid "dry run"
 msgstr ""
 
-#: builtin/add.c:320 builtin/apply.c:4354 builtin/commit.c:1154
-#: builtin/count-objects.c:82 builtin/fsck.c:613 builtin/log.c:1477
+#: builtin/add.c:320 builtin/apply.c:4354 builtin/commit.c:1160
+#: builtin/count-objects.c:82 builtin/fsck.c:613 builtin/log.c:1483
 #: builtin/mv.c:62 builtin/read-tree.c:112
 msgid "be verbose"
 msgstr ""
@@ -1374,7 +1389,7 @@ msgstr ""
 msgid "interactive picking"
 msgstr ""
 
-#: builtin/add.c:323 builtin/checkout.c:1028 builtin/reset.c:248
+#: builtin/add.c:323 builtin/checkout.c:1031 builtin/reset.c:248
 msgid "select hunks interactively"
 msgstr ""
 
@@ -1441,12 +1456,12 @@ msgstr ""
 msgid "Maybe you wanted to say 'git add .'?\n"
 msgstr ""
 
-#: builtin/add.c:421 builtin/clean.c:95 builtin/commit.c:290 builtin/mv.c:82
-#: builtin/rm.c:162
+#: builtin/add.c:421 builtin/clean.c:95 builtin/commit.c:291 builtin/mv.c:82
+#: builtin/rm.c:235
 msgid "index file corrupt"
 msgstr ""
 
-#: builtin/add.c:481 builtin/apply.c:4450 builtin/mv.c:229 builtin/rm.c:260
+#: builtin/add.c:481 builtin/apply.c:4450 builtin/mv.c:229 builtin/rm.c:355
 msgid "Unable to write new index file"
 msgstr ""
 
@@ -1975,95 +1990,95 @@ msgstr ""
 msgid "[rev-opts] are documented in git-rev-list(1)"
 msgstr ""
 
-#: builtin/blame.c:2373
+#: builtin/blame.c:2374
 msgid "Show blame entries as we find them, incrementally"
 msgstr ""
 
-#: builtin/blame.c:2374
+#: builtin/blame.c:2375
 msgid "Show blank SHA-1 for boundary commits (Default: off)"
 msgstr ""
 
-#: builtin/blame.c:2375
+#: builtin/blame.c:2376
 msgid "Do not treat root commits as boundaries (Default: off)"
 msgstr ""
 
-#: builtin/blame.c:2376
+#: builtin/blame.c:2377
 msgid "Show work cost statistics"
 msgstr ""
 
-#: builtin/blame.c:2377
+#: builtin/blame.c:2378
 msgid "Show output score for blame entries"
 msgstr ""
 
-#: builtin/blame.c:2378
+#: builtin/blame.c:2379
 msgid "Show original filename (Default: auto)"
 msgstr ""
 
-#: builtin/blame.c:2379
+#: builtin/blame.c:2380
 msgid "Show original linenumber (Default: off)"
 msgstr ""
 
-#: builtin/blame.c:2380
+#: builtin/blame.c:2381
 msgid "Show in a format designed for machine consumption"
 msgstr ""
 
-#: builtin/blame.c:2381
+#: builtin/blame.c:2382
 msgid "Show porcelain format with per-line commit information"
 msgstr ""
 
-#: builtin/blame.c:2382
+#: builtin/blame.c:2383
 msgid "Use the same output mode as git-annotate (Default: off)"
 msgstr ""
 
-#: builtin/blame.c:2383
+#: builtin/blame.c:2384
 msgid "Show raw timestamp (Default: off)"
 msgstr ""
 
-#: builtin/blame.c:2384
+#: builtin/blame.c:2385
 msgid "Show long commit SHA1 (Default: off)"
 msgstr ""
 
-#: builtin/blame.c:2385
+#: builtin/blame.c:2386
 msgid "Suppress author name and timestamp (Default: off)"
 msgstr ""
 
-#: builtin/blame.c:2386
+#: builtin/blame.c:2387
 msgid "Show author email instead of name (Default: off)"
 msgstr ""
 
-#: builtin/blame.c:2387
+#: builtin/blame.c:2388
 msgid "Ignore whitespace differences"
 msgstr ""
 
-#: builtin/blame.c:2388
+#: builtin/blame.c:2389
 msgid "Spend extra cycles to find better match"
 msgstr ""
 
-#: builtin/blame.c:2389
+#: builtin/blame.c:2390
 msgid "Use revisions from <file> instead of calling git-rev-list"
 msgstr ""
 
-#: builtin/blame.c:2390
+#: builtin/blame.c:2391
 msgid "Use <file>'s contents as the final image"
 msgstr ""
 
-#: builtin/blame.c:2391 builtin/blame.c:2392
+#: builtin/blame.c:2392 builtin/blame.c:2393
 msgid "score"
 msgstr ""
 
-#: builtin/blame.c:2391
+#: builtin/blame.c:2392
 msgid "Find line copies within and across files"
 msgstr ""
 
-#: builtin/blame.c:2392
+#: builtin/blame.c:2393
 msgid "Find line movements within and across files"
 msgstr ""
 
-#: builtin/blame.c:2393
+#: builtin/blame.c:2394
 msgid "n,m"
 msgstr ""
 
-#: builtin/blame.c:2393
+#: builtin/blame.c:2394
 msgid "Process only line range n,m, counting from 1"
 msgstr ""
 
@@ -2097,269 +2112,269 @@ msgid ""
 "         '%s', even though it is merged to HEAD."
 msgstr ""
 
-#: builtin/branch.c:181
+#: builtin/branch.c:163
+#, c-format
+msgid "Couldn't look up commit object for '%s'"
+msgstr ""
+
+#: builtin/branch.c:167
+#, c-format
+msgid ""
+"The branch '%s' is not fully merged.\n"
+"If you are sure you want to delete it, run 'git branch -D %s'."
+msgstr ""
+
+#: builtin/branch.c:180
+msgid "Update of config-file failed"
+msgstr ""
+
+#: builtin/branch.c:208
 msgid "cannot use -a with -d"
 msgstr ""
 
-#: builtin/branch.c:187
+#: builtin/branch.c:214
 msgid "Couldn't look up commit object for HEAD"
 msgstr ""
 
-#: builtin/branch.c:192
+#: builtin/branch.c:222
 #, c-format
 msgid "Cannot delete the branch '%s' which you are currently on."
 msgstr ""
 
-#: builtin/branch.c:203
+#: builtin/branch.c:235
 #, c-format
 msgid "remote branch '%s' not found."
 msgstr ""
 
-#: builtin/branch.c:204
+#: builtin/branch.c:236
 #, c-format
 msgid "branch '%s' not found."
 msgstr ""
 
-#: builtin/branch.c:211
-#, c-format
-msgid "Couldn't look up commit object for '%s'"
-msgstr ""
-
-#: builtin/branch.c:217
-#, c-format
-msgid ""
-"The branch '%s' is not fully merged.\n"
-"If you are sure you want to delete it, run 'git branch -D %s'."
-msgstr ""
-
-#: builtin/branch.c:226
+#: builtin/branch.c:250
 #, c-format
 msgid "Error deleting remote branch '%s'"
 msgstr ""
 
-#: builtin/branch.c:227
+#: builtin/branch.c:251
 #, c-format
 msgid "Error deleting branch '%s'"
 msgstr ""
 
-#: builtin/branch.c:234
+#: builtin/branch.c:258
 #, c-format
 msgid "Deleted remote branch %s (was %s).\n"
 msgstr ""
 
-#: builtin/branch.c:235
+#: builtin/branch.c:259
 #, c-format
 msgid "Deleted branch %s (was %s).\n"
 msgstr ""
 
-#: builtin/branch.c:240
-msgid "Update of config-file failed"
-msgstr ""
-
-#: builtin/branch.c:338
+#: builtin/branch.c:361
 #, c-format
 msgid "branch '%s' does not point at a commit"
 msgstr ""
 
-#: builtin/branch.c:410
+#: builtin/branch.c:433
 #, c-format
 msgid "[%s: behind %d]"
 msgstr ""
 
-#: builtin/branch.c:412
+#: builtin/branch.c:435
 #, c-format
 msgid "[behind %d]"
 msgstr ""
 
-#: builtin/branch.c:416
+#: builtin/branch.c:439
 #, c-format
 msgid "[%s: ahead %d]"
 msgstr ""
 
-#: builtin/branch.c:418
+#: builtin/branch.c:441
 #, c-format
 msgid "[ahead %d]"
 msgstr ""
 
-#: builtin/branch.c:421
+#: builtin/branch.c:444
 #, c-format
 msgid "[%s: ahead %d, behind %d]"
 msgstr ""
 
-#: builtin/branch.c:424
+#: builtin/branch.c:447
 #, c-format
 msgid "[ahead %d, behind %d]"
 msgstr ""
 
-#: builtin/branch.c:537
+#: builtin/branch.c:560
 msgid "(no branch)"
 msgstr ""
 
-#: builtin/branch.c:602
+#: builtin/branch.c:625
 msgid "some refs could not be read"
 msgstr ""
 
-#: builtin/branch.c:615
+#: builtin/branch.c:638
 msgid "cannot rename the current branch while not on any."
 msgstr ""
 
-#: builtin/branch.c:625
+#: builtin/branch.c:648
 #, c-format
 msgid "Invalid branch name: '%s'"
 msgstr ""
 
-#: builtin/branch.c:640
+#: builtin/branch.c:663
 msgid "Branch rename failed"
 msgstr ""
 
-#: builtin/branch.c:644
+#: builtin/branch.c:667
 #, c-format
 msgid "Renamed a misnamed branch '%s' away"
 msgstr ""
 
-#: builtin/branch.c:648
+#: builtin/branch.c:671
 #, c-format
 msgid "Branch renamed to %s, but HEAD is not updated!"
 msgstr ""
 
-#: builtin/branch.c:655
+#: builtin/branch.c:678
 msgid "Branch is renamed, but update of config-file failed"
 msgstr ""
 
-#: builtin/branch.c:670
+#: builtin/branch.c:693
 #, c-format
 msgid "malformed object name %s"
 msgstr ""
 
-#: builtin/branch.c:694
+#: builtin/branch.c:717
 #, c-format
 msgid "could not write branch description template: %s"
 msgstr ""
 
-#: builtin/branch.c:724
+#: builtin/branch.c:747
 msgid "Generic options"
 msgstr ""
 
-#: builtin/branch.c:726
+#: builtin/branch.c:749
 msgid "show hash and subject, give twice for upstream branch"
 msgstr ""
 
-#: builtin/branch.c:727
+#: builtin/branch.c:750
 msgid "suppress informational messages"
 msgstr ""
 
-#: builtin/branch.c:728
+#: builtin/branch.c:751
 msgid "set up tracking mode (see git-pull(1))"
 msgstr ""
 
-#: builtin/branch.c:730
+#: builtin/branch.c:753
 msgid "change upstream info"
 msgstr ""
 
-#: builtin/branch.c:734
+#: builtin/branch.c:757
 msgid "use colored output"
 msgstr ""
 
-#: builtin/branch.c:735
+#: builtin/branch.c:758
 msgid "act on remote-tracking branches"
 msgstr ""
 
-#: builtin/branch.c:738 builtin/branch.c:744 builtin/branch.c:765
-#: builtin/branch.c:771 builtin/commit.c:1362 builtin/commit.c:1363
-#: builtin/commit.c:1364 builtin/commit.c:1365 builtin/tag.c:470
+#: builtin/branch.c:761 builtin/branch.c:767 builtin/branch.c:788
+#: builtin/branch.c:794 builtin/commit.c:1376 builtin/commit.c:1377
+#: builtin/commit.c:1378 builtin/commit.c:1379 builtin/tag.c:470
 msgid "commit"
 msgstr ""
 
-#: builtin/branch.c:739 builtin/branch.c:745
+#: builtin/branch.c:762 builtin/branch.c:768
 msgid "print only branches that contain the commit"
 msgstr ""
 
-#: builtin/branch.c:751
+#: builtin/branch.c:774
 msgid "Specific git-branch actions:"
 msgstr ""
 
-#: builtin/branch.c:752
+#: builtin/branch.c:775
 msgid "list both remote-tracking and local branches"
 msgstr ""
 
-#: builtin/branch.c:754
+#: builtin/branch.c:777
 msgid "delete fully merged branch"
 msgstr ""
 
-#: builtin/branch.c:755
+#: builtin/branch.c:778
 msgid "delete branch (even if not merged)"
 msgstr ""
 
-#: builtin/branch.c:756
+#: builtin/branch.c:779
 msgid "move/rename a branch and its reflog"
 msgstr ""
 
-#: builtin/branch.c:757
+#: builtin/branch.c:780
 msgid "move/rename a branch, even if target exists"
 msgstr ""
 
-#: builtin/branch.c:758
+#: builtin/branch.c:781
 msgid "list branch names"
 msgstr ""
 
-#: builtin/branch.c:759
+#: builtin/branch.c:782
 msgid "create the branch's reflog"
 msgstr ""
 
-#: builtin/branch.c:761
+#: builtin/branch.c:784
 msgid "edit the description for the branch"
 msgstr ""
 
-#: builtin/branch.c:762
+#: builtin/branch.c:785
 msgid "force creation (when already exists)"
 msgstr ""
 
-#: builtin/branch.c:765
+#: builtin/branch.c:788
 msgid "print only not merged branches"
 msgstr ""
 
-#: builtin/branch.c:771
+#: builtin/branch.c:794
 msgid "print only merged branches"
 msgstr ""
 
-#: builtin/branch.c:775
+#: builtin/branch.c:798
 msgid "list branches in columns"
 msgstr ""
 
-#: builtin/branch.c:788
+#: builtin/branch.c:811
 msgid "Failed to resolve HEAD as a valid ref."
 msgstr ""
 
-#: builtin/branch.c:793 builtin/clone.c:561
+#: builtin/branch.c:816 builtin/clone.c:561
 msgid "HEAD not found below refs/heads!"
 msgstr ""
 
-#: builtin/branch.c:813
+#: builtin/branch.c:836
 msgid "--column and --verbose are incompatible"
 msgstr ""
 
-#: builtin/branch.c:864
+#: builtin/branch.c:887
 #, c-format
 msgid "branch '%s' does not exist"
 msgstr ""
 
-#: builtin/branch.c:876
+#: builtin/branch.c:899
 #, c-format
 msgid "Branch '%s' has no upstream information"
 msgstr ""
 
-#: builtin/branch.c:891
+#: builtin/branch.c:914
 msgid "-a and -r options to 'git branch' do not make sense with a branch name"
 msgstr ""
 
-#: builtin/branch.c:894
+#: builtin/branch.c:917
 #, c-format
 msgid ""
 "The --set-upstream flag is deprecated and will be removed. Consider using --"
 "track or --set-upstream-to\n"
 msgstr ""
 
-#: builtin/branch.c:911
+#: builtin/branch.c:934
 #, c-format
 msgid ""
 "\n"
@@ -2367,12 +2382,12 @@ msgid ""
 "\n"
 msgstr ""
 
-#: builtin/branch.c:912
+#: builtin/branch.c:935
 #, c-format
 msgid "    git branch -d %s\n"
 msgstr ""
 
-#: builtin/branch.c:913
+#: builtin/branch.c:936
 #, c-format
 msgid "    git branch --set-upstream-to %s\n"
 msgstr ""
@@ -2561,11 +2576,6 @@ msgstr ""
 msgid "path '%s' is unmerged"
 msgstr ""
 
-#: builtin/checkout.c:333 builtin/checkout.c:534 builtin/clone.c:586
-#: builtin/merge.c:811
-msgid "unable to write new index file"
-msgstr ""
-
 #: builtin/checkout.c:448
 msgid "you need to resolve your current index first"
 msgstr ""
@@ -2594,7 +2604,7 @@ msgstr ""
 msgid "Switched to and reset branch '%s'\n"
 msgstr ""
 
-#: builtin/checkout.c:618
+#: builtin/checkout.c:618 builtin/checkout.c:955
 #, c-format
 msgid "Switched to a new branch '%s'\n"
 msgstr ""
@@ -2659,124 +2669,124 @@ msgstr ""
 msgid "reference is not a tree: %s"
 msgstr ""
 
-#: builtin/checkout.c:961
+#: builtin/checkout.c:964
 msgid "paths cannot be used with switching branches"
 msgstr ""
 
-#: builtin/checkout.c:964 builtin/checkout.c:968
+#: builtin/checkout.c:967 builtin/checkout.c:971
 #, c-format
 msgid "'%s' cannot be used with switching branches"
 msgstr ""
 
-#: builtin/checkout.c:972 builtin/checkout.c:975 builtin/checkout.c:980
-#: builtin/checkout.c:983
+#: builtin/checkout.c:975 builtin/checkout.c:978 builtin/checkout.c:983
+#: builtin/checkout.c:986
 #, c-format
 msgid "'%s' cannot be used with '%s'"
 msgstr ""
 
-#: builtin/checkout.c:988
+#: builtin/checkout.c:991
 #, c-format
 msgid "Cannot switch branch to a non-commit '%s'"
 msgstr ""
 
-#: builtin/checkout.c:1009 builtin/gc.c:177
+#: builtin/checkout.c:1012 builtin/gc.c:177
 msgid "suppress progress reporting"
 msgstr ""
 
-#: builtin/checkout.c:1010 builtin/checkout.c:1012 builtin/clone.c:89
+#: builtin/checkout.c:1013 builtin/checkout.c:1015 builtin/clone.c:89
 #: builtin/remote.c:169 builtin/remote.c:171
 msgid "branch"
 msgstr ""
 
-#: builtin/checkout.c:1011
+#: builtin/checkout.c:1014
 msgid "create and checkout a new branch"
 msgstr ""
 
-#: builtin/checkout.c:1013
+#: builtin/checkout.c:1016
 msgid "create/reset and checkout a branch"
 msgstr ""
 
-#: builtin/checkout.c:1014
+#: builtin/checkout.c:1017
 msgid "create reflog for new branch"
 msgstr ""
 
-#: builtin/checkout.c:1015
+#: builtin/checkout.c:1018
 msgid "detach the HEAD at named commit"
 msgstr ""
 
-#: builtin/checkout.c:1016
+#: builtin/checkout.c:1019
 msgid "set upstream info for new branch"
 msgstr ""
 
-#: builtin/checkout.c:1018
+#: builtin/checkout.c:1021
 msgid "new branch"
 msgstr ""
 
-#: builtin/checkout.c:1018
+#: builtin/checkout.c:1021
 msgid "new unparented branch"
 msgstr ""
 
-#: builtin/checkout.c:1019
+#: builtin/checkout.c:1022
 msgid "checkout our version for unmerged files"
 msgstr ""
 
-#: builtin/checkout.c:1021
+#: builtin/checkout.c:1024
 msgid "checkout their version for unmerged files"
 msgstr ""
 
-#: builtin/checkout.c:1023
+#: builtin/checkout.c:1026
 msgid "force checkout (throw away local modifications)"
 msgstr ""
 
-#: builtin/checkout.c:1024
+#: builtin/checkout.c:1027
 msgid "perform a 3-way merge with the new branch"
 msgstr ""
 
-#: builtin/checkout.c:1025 builtin/merge.c:215
+#: builtin/checkout.c:1028 builtin/merge.c:215
 msgid "update ignored files (default)"
 msgstr ""
 
-#: builtin/checkout.c:1026 builtin/log.c:1111 parse-options.h:241
+#: builtin/checkout.c:1029 builtin/log.c:1116 parse-options.h:241
 msgid "style"
 msgstr ""
 
-#: builtin/checkout.c:1027
+#: builtin/checkout.c:1030
 msgid "conflict style (merge or diff3)"
 msgstr ""
 
-#: builtin/checkout.c:1030
+#: builtin/checkout.c:1033
 msgid "second guess 'git checkout no-such-branch'"
 msgstr ""
 
-#: builtin/checkout.c:1054
+#: builtin/checkout.c:1057
 msgid "-b, -B and --orphan are mutually exclusive"
 msgstr ""
 
-#: builtin/checkout.c:1071
+#: builtin/checkout.c:1074
 msgid "--track needs a branch name"
 msgstr ""
 
-#: builtin/checkout.c:1078
+#: builtin/checkout.c:1081
 msgid "Missing branch name; try -b"
 msgstr ""
 
-#: builtin/checkout.c:1113
+#: builtin/checkout.c:1116
 msgid "invalid path specification"
 msgstr ""
 
-#: builtin/checkout.c:1120
+#: builtin/checkout.c:1123
 #, 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 ""
 
-#: builtin/checkout.c:1125
+#: builtin/checkout.c:1128
 #, c-format
 msgid "git checkout: --detach does not take a path argument '%s'"
 msgstr ""
 
-#: builtin/checkout.c:1129
+#: builtin/checkout.c:1132
 msgid ""
 "git checkout: --ours/--theirs, --force and --merge are incompatible when\n"
 "checking out of the index."
@@ -2798,8 +2808,8 @@ msgstr ""
 msgid "remove whole directories"
 msgstr ""
 
-#: builtin/clean.c:56 builtin/describe.c:413 builtin/grep.c:803
-#: builtin/ls-files.c:491 builtin/name-rev.c:231 builtin/show-ref.c:199
+#: builtin/clean.c:56 builtin/describe.c:413 builtin/grep.c:717
+#: builtin/ls-files.c:491 builtin/name-rev.c:231 builtin/show-ref.c:182
 msgid "pattern"
 msgstr ""
 
@@ -2920,7 +2930,7 @@ msgstr ""
 msgid "path to git-upload-pack on the remote"
 msgstr ""
 
-#: builtin/clone.c:93 builtin/fetch.c:83 builtin/grep.c:748
+#: builtin/clone.c:93 builtin/fetch.c:83 builtin/grep.c:662
 msgid "depth"
 msgstr ""
 
@@ -3134,93 +3144,93 @@ msgid ""
 "Otherwise, please use 'git reset'\n"
 msgstr ""
 
-#: builtin/commit.c:257
+#: builtin/commit.c:258
 msgid "failed to unpack HEAD tree object"
 msgstr ""
 
-#: builtin/commit.c:299
+#: builtin/commit.c:300
 msgid "unable to create temporary index"
 msgstr ""
 
-#: builtin/commit.c:305
+#: builtin/commit.c:306
 msgid "interactive add failed"
 msgstr ""
 
-#: builtin/commit.c:338 builtin/commit.c:359 builtin/commit.c:409
+#: builtin/commit.c:339 builtin/commit.c:360 builtin/commit.c:410
 msgid "unable to write new_index file"
 msgstr ""
 
-#: builtin/commit.c:390
+#: builtin/commit.c:391
 msgid "cannot do a partial commit during a merge."
 msgstr ""
 
-#: builtin/commit.c:392
+#: builtin/commit.c:393
 msgid "cannot do a partial commit during a cherry-pick."
 msgstr ""
 
-#: builtin/commit.c:402
+#: builtin/commit.c:403
 msgid "cannot read the index"
 msgstr ""
 
-#: builtin/commit.c:422
+#: builtin/commit.c:423
 msgid "unable to write temporary index file"
 msgstr ""
 
-#: builtin/commit.c:509 builtin/commit.c:515
+#: builtin/commit.c:511 builtin/commit.c:517
 #, c-format
 msgid "invalid commit: %s"
 msgstr ""
 
-#: builtin/commit.c:538
+#: builtin/commit.c:540
 msgid "malformed --author parameter"
 msgstr ""
 
-#: builtin/commit.c:558
+#: builtin/commit.c:560
 #, c-format
 msgid "Malformed ident string: '%s'"
 msgstr ""
 
-#: builtin/commit.c:596 builtin/commit.c:629 builtin/commit.c:952
+#: builtin/commit.c:598 builtin/commit.c:631 builtin/commit.c:954
 #, c-format
 msgid "could not lookup commit %s"
 msgstr ""
 
-#: builtin/commit.c:608 builtin/shortlog.c:296
+#: builtin/commit.c:610 builtin/shortlog.c:296
 #, c-format
 msgid "(reading log message from standard input)\n"
 msgstr ""
 
-#: builtin/commit.c:610
+#: builtin/commit.c:612
 msgid "could not read log from standard input"
 msgstr ""
 
-#: builtin/commit.c:614
+#: builtin/commit.c:616
 #, c-format
 msgid "could not read log file '%s'"
 msgstr ""
 
-#: builtin/commit.c:620
+#: builtin/commit.c:622
 msgid "commit has empty message"
 msgstr ""
 
-#: builtin/commit.c:636
+#: builtin/commit.c:638
 msgid "could not read MERGE_MSG"
 msgstr ""
 
-#: builtin/commit.c:640
+#: builtin/commit.c:642
 msgid "could not read SQUASH_MSG"
 msgstr ""
 
-#: builtin/commit.c:644
+#: builtin/commit.c:646
 #, c-format
 msgid "could not read '%s'"
 msgstr ""
 
-#: builtin/commit.c:705
+#: builtin/commit.c:707
 msgid "could not write commit template"
 msgstr ""
 
-#: builtin/commit.c:716
+#: builtin/commit.c:718
 #, c-format
 msgid ""
 "\n"
@@ -3230,7 +3240,7 @@ msgid ""
 "and try again.\n"
 msgstr ""
 
-#: builtin/commit.c:721
+#: builtin/commit.c:723
 #, c-format
 msgid ""
 "\n"
@@ -3240,356 +3250,364 @@ msgid ""
 "and try again.\n"
 msgstr ""
 
-#: builtin/commit.c:733
+#: builtin/commit.c:735
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
 "with '#' will be ignored, and an empty message aborts the commit.\n"
 msgstr ""
 
-#: builtin/commit.c:738
+#: builtin/commit.c:740
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
 "with '#' will be kept; you may remove them yourself if you want to.\n"
 "An empty message aborts the commit.\n"
 msgstr ""
 
-#: builtin/commit.c:751
+#: builtin/commit.c:753
 #, c-format
 msgid "%sAuthor:    %s"
 msgstr ""
 
-#: builtin/commit.c:758
+#: builtin/commit.c:760
 #, c-format
 msgid "%sCommitter: %s"
 msgstr ""
 
-#: builtin/commit.c:778
+#: builtin/commit.c:780
 msgid "Cannot read index"
 msgstr ""
 
-#: builtin/commit.c:815
+#: builtin/commit.c:817
 msgid "Error building trees"
 msgstr ""
 
-#: builtin/commit.c:830 builtin/tag.c:361
+#: builtin/commit.c:832 builtin/tag.c:361
 #, c-format
 msgid "Please supply the message using either -m or -F option.\n"
 msgstr ""
 
-#: builtin/commit.c:927
+#: builtin/commit.c:929
 #, c-format
 msgid "No existing author found with '%s'"
 msgstr ""
 
-#: builtin/commit.c:942 builtin/commit.c:1142
+#: builtin/commit.c:944 builtin/commit.c:1148
 #, c-format
 msgid "Invalid untracked files mode '%s'"
 msgstr ""
 
-#: builtin/commit.c:982
+#: builtin/commit.c:984
 msgid "Using both --reset-author and --author does not make sense"
 msgstr ""
 
-#: builtin/commit.c:993
+#: builtin/commit.c:995
 msgid "You have nothing to amend."
 msgstr ""
 
-#: builtin/commit.c:996
+#: builtin/commit.c:998
 msgid "You are in the middle of a merge -- cannot amend."
 msgstr ""
 
-#: builtin/commit.c:998
+#: builtin/commit.c:1000
 msgid "You are in the middle of a cherry-pick -- cannot amend."
 msgstr ""
 
-#: builtin/commit.c:1001
+#: builtin/commit.c:1003
 msgid "Options --squash and --fixup cannot be used together"
 msgstr ""
 
-#: builtin/commit.c:1011
+#: builtin/commit.c:1013
 msgid "Only one of -c/-C/-F/--fixup can be used."
 msgstr ""
 
-#: builtin/commit.c:1013
+#: builtin/commit.c:1015
 msgid "Option -m cannot be combined with -c/-C/-F/--fixup."
 msgstr ""
 
-#: builtin/commit.c:1021
+#: builtin/commit.c:1023
 msgid "--reset-author can be used only with -C, -c or --amend."
 msgstr ""
 
-#: builtin/commit.c:1038
+#: builtin/commit.c:1040
 msgid "Only one of --include/--only/--all/--interactive/--patch can be used."
 msgstr ""
 
-#: builtin/commit.c:1040
+#: builtin/commit.c:1042
 msgid "No paths with --include/--only does not make sense."
 msgstr ""
 
-#: builtin/commit.c:1042
+#: builtin/commit.c:1044
 msgid "Clever... amending the last one with dirty index."
 msgstr ""
 
-#: builtin/commit.c:1044
+#: builtin/commit.c:1046
 msgid "Explicit paths specified without -i nor -o; assuming --only paths..."
 msgstr ""
 
-#: builtin/commit.c:1054 builtin/tag.c:577
+#: builtin/commit.c:1056 builtin/tag.c:577
 #, c-format
 msgid "Invalid cleanup mode %s"
 msgstr ""
 
-#: builtin/commit.c:1059
+#: builtin/commit.c:1061
 msgid "Paths with -a does not make sense."
 msgstr ""
 
-#: builtin/commit.c:1156 builtin/commit.c:1384
+#: builtin/commit.c:1067 builtin/commit.c:1202
+msgid "--long and -z are incompatible"
+msgstr ""
+
+#: builtin/commit.c:1162 builtin/commit.c:1398
 msgid "show status concisely"
 msgstr ""
 
-#: builtin/commit.c:1158 builtin/commit.c:1386
+#: builtin/commit.c:1164 builtin/commit.c:1400
 msgid "show branch information"
 msgstr ""
 
-#: builtin/commit.c:1160 builtin/commit.c:1388 builtin/push.c:389
+#: builtin/commit.c:1166 builtin/commit.c:1402 builtin/push.c:389
 msgid "machine-readable output"
 msgstr ""
 
-#: builtin/commit.c:1163 builtin/commit.c:1390
+#: builtin/commit.c:1169 builtin/commit.c:1404
+msgid "show status in long format (default)"
+msgstr ""
+
+#: builtin/commit.c:1172 builtin/commit.c:1407
 msgid "terminate entries with NUL"
 msgstr ""
 
-#: builtin/commit.c:1165 builtin/commit.c:1393 builtin/fast-export.c:636
+#: builtin/commit.c:1174 builtin/commit.c:1410 builtin/fast-export.c:636
 #: builtin/fast-export.c:639 builtin/tag.c:461
 msgid "mode"
 msgstr ""
 
-#: builtin/commit.c:1166 builtin/commit.c:1393
+#: builtin/commit.c:1175 builtin/commit.c:1410
 msgid "show untracked files, optional modes: all, normal, no. (Default: all)"
 msgstr ""
 
-#: builtin/commit.c:1169
+#: builtin/commit.c:1178
 msgid "show ignored files"
 msgstr ""
 
-#: builtin/commit.c:1170 parse-options.h:151
+#: builtin/commit.c:1179 parse-options.h:151
 msgid "when"
 msgstr ""
 
-#: builtin/commit.c:1171
+#: builtin/commit.c:1180
 msgid ""
 "ignore changes to submodules, optional when: all, dirty, untracked. "
 "(Default: all)"
 msgstr ""
 
-#: builtin/commit.c:1173
+#: builtin/commit.c:1182
 msgid "list untracked files in columns"
 msgstr ""
 
-#: builtin/commit.c:1242
+#: builtin/commit.c:1256
 msgid "couldn't look up newly created commit"
 msgstr ""
 
-#: builtin/commit.c:1244
+#: builtin/commit.c:1258
 msgid "could not parse newly created commit"
 msgstr ""
 
-#: builtin/commit.c:1285
+#: builtin/commit.c:1299
 msgid "detached HEAD"
 msgstr ""
 
-#: builtin/commit.c:1287
+#: builtin/commit.c:1301
 msgid " (root-commit)"
 msgstr ""
 
-#: builtin/commit.c:1354
+#: builtin/commit.c:1368
 msgid "suppress summary after successful commit"
 msgstr ""
 
-#: builtin/commit.c:1355
+#: builtin/commit.c:1369
 msgid "show diff in commit message template"
 msgstr ""
 
-#: builtin/commit.c:1357
+#: builtin/commit.c:1371
 msgid "Commit message options"
 msgstr ""
 
-#: builtin/commit.c:1358 builtin/tag.c:459
+#: builtin/commit.c:1372 builtin/tag.c:459
 msgid "read message from file"
 msgstr ""
 
-#: builtin/commit.c:1359
+#: builtin/commit.c:1373
 msgid "author"
 msgstr ""
 
-#: builtin/commit.c:1359
+#: builtin/commit.c:1373
 msgid "override author for commit"
 msgstr ""
 
-#: builtin/commit.c:1360 builtin/gc.c:178
+#: builtin/commit.c:1374 builtin/gc.c:178
 msgid "date"
 msgstr ""
 
-#: builtin/commit.c:1360
+#: builtin/commit.c:1374
 msgid "override date for commit"
 msgstr ""
 
-#: builtin/commit.c:1361 builtin/merge.c:206 builtin/notes.c:537
+#: builtin/commit.c:1375 builtin/merge.c:206 builtin/notes.c:537
 #: builtin/notes.c:694 builtin/tag.c:457
 msgid "message"
 msgstr ""
 
-#: builtin/commit.c:1361
+#: builtin/commit.c:1375
 msgid "commit message"
 msgstr ""
 
-#: builtin/commit.c:1362
+#: builtin/commit.c:1376
 msgid "reuse and edit message from specified commit"
 msgstr ""
 
-#: builtin/commit.c:1363
+#: builtin/commit.c:1377
 msgid "reuse message from specified commit"
 msgstr ""
 
-#: builtin/commit.c:1364
+#: builtin/commit.c:1378
 msgid "use autosquash formatted message to fixup specified commit"
 msgstr ""
 
-#: builtin/commit.c:1365
+#: builtin/commit.c:1379
 msgid "use autosquash formatted message to squash specified commit"
 msgstr ""
 
-#: builtin/commit.c:1366
+#: builtin/commit.c:1380
 msgid "the commit is authored by me now (used with -C/-c/--amend)"
 msgstr ""
 
-#: builtin/commit.c:1367 builtin/log.c:1068 builtin/revert.c:109
+#: builtin/commit.c:1381 builtin/log.c:1073 builtin/revert.c:109
 msgid "add Signed-off-by:"
 msgstr ""
 
-#: builtin/commit.c:1368
+#: builtin/commit.c:1382
 msgid "use specified template file"
 msgstr ""
 
-#: builtin/commit.c:1369
+#: builtin/commit.c:1383
 msgid "force edit of commit"
 msgstr ""
 
-#: builtin/commit.c:1370
+#: builtin/commit.c:1384
 msgid "default"
 msgstr ""
 
-#: builtin/commit.c:1370 builtin/tag.c:462
+#: builtin/commit.c:1384 builtin/tag.c:462
 msgid "how to strip spaces and #comments from message"
 msgstr ""
 
-#: builtin/commit.c:1371
+#: builtin/commit.c:1385
 msgid "include status in commit message template"
 msgstr ""
 
-#: builtin/commit.c:1372 builtin/merge.c:213 builtin/tag.c:463
+#: builtin/commit.c:1386 builtin/merge.c:213 builtin/tag.c:463
 msgid "key id"
 msgstr ""
 
-#: builtin/commit.c:1373 builtin/merge.c:214
+#: builtin/commit.c:1387 builtin/merge.c:214
 msgid "GPG sign commit"
 msgstr ""
 
 #. end commit message options
-#: builtin/commit.c:1376
+#: builtin/commit.c:1390
 msgid "Commit contents options"
 msgstr ""
 
-#: builtin/commit.c:1377
+#: builtin/commit.c:1391
 msgid "commit all changed files"
 msgstr ""
 
-#: builtin/commit.c:1378
+#: builtin/commit.c:1392
 msgid "add specified files to index for commit"
 msgstr ""
 
-#: builtin/commit.c:1379
+#: builtin/commit.c:1393
 msgid "interactively add files"
 msgstr ""
 
-#: builtin/commit.c:1380
+#: builtin/commit.c:1394
 msgid "interactively add changes"
 msgstr ""
 
-#: builtin/commit.c:1381
+#: builtin/commit.c:1395
 msgid "commit only specified files"
 msgstr ""
 
-#: builtin/commit.c:1382
+#: builtin/commit.c:1396
 msgid "bypass pre-commit hook"
 msgstr ""
 
-#: builtin/commit.c:1383
+#: builtin/commit.c:1397
 msgid "show what would be committed"
 msgstr ""
 
-#: builtin/commit.c:1391
+#: builtin/commit.c:1408
 msgid "amend previous commit"
 msgstr ""
 
-#: builtin/commit.c:1392
+#: builtin/commit.c:1409
 msgid "bypass post-rewrite hook"
 msgstr ""
 
-#: builtin/commit.c:1397
+#: builtin/commit.c:1414
 msgid "ok to record an empty change"
 msgstr ""
 
-#: builtin/commit.c:1400
+#: builtin/commit.c:1417
 msgid "ok to record a change with an empty message"
 msgstr ""
 
-#: builtin/commit.c:1432
+#: builtin/commit.c:1449
 msgid "could not parse HEAD commit"
 msgstr ""
 
-#: builtin/commit.c:1470 builtin/merge.c:508
+#: builtin/commit.c:1487 builtin/merge.c:508
 #, c-format
 msgid "could not open '%s' for reading"
 msgstr ""
 
-#: builtin/commit.c:1477
+#: builtin/commit.c:1494
 #, c-format
 msgid "Corrupt MERGE_HEAD file (%s)"
 msgstr ""
 
-#: builtin/commit.c:1484
+#: builtin/commit.c:1501
 msgid "could not read MERGE_MODE"
 msgstr ""
 
-#: builtin/commit.c:1503
+#: builtin/commit.c:1520
 #, c-format
 msgid "could not read commit message: %s"
 msgstr ""
 
-#: builtin/commit.c:1517
+#: builtin/commit.c:1534
 #, c-format
 msgid "Aborting commit; you did not edit the message.\n"
 msgstr ""
 
-#: builtin/commit.c:1522
+#: builtin/commit.c:1539
 #, c-format
 msgid "Aborting commit due to empty commit message.\n"
 msgstr ""
 
-#: builtin/commit.c:1537 builtin/merge.c:935 builtin/merge.c:960
+#: builtin/commit.c:1554 builtin/merge.c:832 builtin/merge.c:857
 msgid "failed to write commit object"
 msgstr ""
 
-#: builtin/commit.c:1558
+#: builtin/commit.c:1575
 msgid "cannot lock HEAD ref"
 msgstr ""
 
-#: builtin/commit.c:1562
+#: builtin/commit.c:1579
 msgid "cannot update HEAD ref"
 msgstr ""
 
-#: builtin/commit.c:1573
+#: builtin/commit.c:1590
 msgid ""
 "Repository has been updated, but unable to write\n"
 "new_index file. Check that disk is not full or quota is\n"
@@ -3600,115 +3618,115 @@ msgstr ""
 msgid "git config [options]"
 msgstr ""
 
-#: builtin/config.c:52
+#: builtin/config.c:51
 msgid "Config file location"
 msgstr ""
 
-#: builtin/config.c:53
+#: builtin/config.c:52
 msgid "use global config file"
 msgstr ""
 
-#: builtin/config.c:54
+#: builtin/config.c:53
 msgid "use system config file"
 msgstr ""
 
-#: builtin/config.c:55
+#: builtin/config.c:54
 msgid "use repository config file"
 msgstr ""
 
-#: builtin/config.c:56
+#: builtin/config.c:55
 msgid "use given config file"
 msgstr ""
 
-#: builtin/config.c:57
+#: builtin/config.c:56
 msgid "Action"
 msgstr ""
 
-#: builtin/config.c:58
+#: builtin/config.c:57
 msgid "get value: name [value-regex]"
 msgstr ""
 
-#: builtin/config.c:59
+#: builtin/config.c:58
 msgid "get all values: key [value-regex]"
 msgstr ""
 
-#: builtin/config.c:60
+#: builtin/config.c:59
 msgid "get values for regexp: name-regex [value-regex]"
 msgstr ""
 
-#: builtin/config.c:61
+#: builtin/config.c:60
 msgid "replace all matching variables: name value [value_regex]"
 msgstr ""
 
-#: builtin/config.c:62
+#: builtin/config.c:61
 msgid "add a new variable: name value"
 msgstr ""
 
-#: builtin/config.c:63
+#: builtin/config.c:62
 msgid "remove a variable: name [value-regex]"
 msgstr ""
 
-#: builtin/config.c:64
+#: builtin/config.c:63
 msgid "remove all matches: name [value-regex]"
 msgstr ""
 
-#: builtin/config.c:65
+#: builtin/config.c:64
 msgid "rename section: old-name new-name"
 msgstr ""
 
-#: builtin/config.c:66
+#: builtin/config.c:65
 msgid "remove a section: name"
 msgstr ""
 
-#: builtin/config.c:67
+#: builtin/config.c:66
 msgid "list all"
 msgstr ""
 
-#: builtin/config.c:68
+#: builtin/config.c:67
 msgid "open an editor"
 msgstr ""
 
-#: builtin/config.c:69 builtin/config.c:70
+#: builtin/config.c:68 builtin/config.c:69
 msgid "slot"
 msgstr ""
 
-#: builtin/config.c:69
+#: builtin/config.c:68
 msgid "find the color configured: [default]"
 msgstr ""
 
-#: builtin/config.c:70
+#: builtin/config.c:69
 msgid "find the color setting: [stdout-is-tty]"
 msgstr ""
 
-#: builtin/config.c:71
+#: builtin/config.c:70
 msgid "Type"
 msgstr ""
 
-#: builtin/config.c:72
+#: builtin/config.c:71
 msgid "value is \"true\" or \"false\""
 msgstr ""
 
-#: builtin/config.c:73
+#: builtin/config.c:72
 msgid "value is decimal number"
 msgstr ""
 
-#: builtin/config.c:74
+#: builtin/config.c:73
 msgid "value is --bool or --int"
 msgstr ""
 
-#: builtin/config.c:75
+#: builtin/config.c:74
 msgid "value is a path (file or directory name)"
 msgstr ""
 
-#: builtin/config.c:76
+#: builtin/config.c:75
 msgid "Other"
 msgstr ""
 
-#: builtin/config.c:77
+#: builtin/config.c:76
 msgid "terminate values with NUL byte"
 msgstr ""
 
-#: builtin/config.c:78
+#: builtin/config.c:77
 msgid "respect include directives on lookup"
 msgstr ""
 
@@ -3851,31 +3869,31 @@ msgstr ""
 msgid "'%s': not a regular file or symlink"
 msgstr ""
 
-#: builtin/diff.c:224
+#: builtin/diff.c:228
 #, c-format
 msgid "invalid option: %s"
 msgstr ""
 
-#: builtin/diff.c:301
+#: builtin/diff.c:305
 msgid "Not a git repository"
 msgstr ""
 
-#: builtin/diff.c:344
+#: builtin/diff.c:348
 #, c-format
 msgid "invalid object '%s' given."
 msgstr ""
 
-#: builtin/diff.c:349
+#: builtin/diff.c:353
 #, c-format
 msgid "more than %d trees given: '%s'"
 msgstr ""
 
-#: builtin/diff.c:359
+#: builtin/diff.c:363
 #, c-format
 msgid "more than two blobs given: '%s'"
 msgstr ""
 
-#: builtin/diff.c:367
+#: builtin/diff.c:371
 #, c-format
 msgid "unhandled object '%s' given."
 msgstr ""
@@ -3988,7 +4006,7 @@ msgstr ""
 msgid "deepen history of shallow clone"
 msgstr ""
 
-#: builtin/fetch.c:85 builtin/log.c:1083
+#: builtin/fetch.c:85 builtin/log.c:1088
 msgid "dir"
 msgstr ""
 
@@ -4155,8 +4173,8 @@ msgstr ""
 msgid "git fmt-merge-msg [-m <message>] [--log[=<n>]|--no-log] [--file <file>]"
 msgstr ""
 
-#: builtin/fmt-merge-msg.c:653 builtin/fmt-merge-msg.c:656 builtin/grep.c:787
-#: builtin/merge.c:188 builtin/show-branch.c:656 builtin/show-ref.c:192
+#: builtin/fmt-merge-msg.c:653 builtin/fmt-merge-msg.c:656 builtin/grep.c:701
+#: builtin/merge.c:188 builtin/show-branch.c:656 builtin/show-ref.c:175
 #: builtin/tag.c:448 parse-options.h:133 parse-options.h:235
 msgid "n"
 msgstr ""
@@ -4312,225 +4330,225 @@ msgstr ""
 msgid "grep: failed to create thread: %s"
 msgstr ""
 
-#: builtin/grep.c:455
+#: builtin/grep.c:365
 #, c-format
 msgid "Failed to chdir: %s"
 msgstr ""
 
-#: builtin/grep.c:531 builtin/grep.c:565
+#: builtin/grep.c:443 builtin/grep.c:478
 #, c-format
 msgid "unable to read tree (%s)"
 msgstr ""
 
-#: builtin/grep.c:579
+#: builtin/grep.c:493
 #, c-format
 msgid "unable to grep from object of type %s"
 msgstr ""
 
-#: builtin/grep.c:637
+#: builtin/grep.c:551
 #, c-format
 msgid "switch `%c' expects a numerical value"
 msgstr ""
 
-#: builtin/grep.c:654
+#: builtin/grep.c:568
 #, c-format
 msgid "cannot open '%s'"
 msgstr ""
 
-#: builtin/grep.c:729
+#: builtin/grep.c:643
 msgid "search in index instead of in the work tree"
 msgstr ""
 
-#: builtin/grep.c:731
+#: builtin/grep.c:645
 msgid "find in contents not managed by git"
 msgstr ""
 
-#: builtin/grep.c:733
+#: builtin/grep.c:647
 msgid "search in both tracked and untracked files"
 msgstr ""
 
-#: builtin/grep.c:735
+#: builtin/grep.c:649
 msgid "search also in ignored files"
 msgstr ""
 
-#: builtin/grep.c:738
+#: builtin/grep.c:652
 msgid "show non-matching lines"
 msgstr ""
 
-#: builtin/grep.c:740
+#: builtin/grep.c:654
 msgid "case insensitive matching"
 msgstr ""
 
-#: builtin/grep.c:742
+#: builtin/grep.c:656
 msgid "match patterns only at word boundaries"
 msgstr ""
 
-#: builtin/grep.c:744
+#: builtin/grep.c:658
 msgid "process binary files as text"
 msgstr ""
 
-#: builtin/grep.c:746
+#: builtin/grep.c:660
 msgid "don't match patterns in binary files"
 msgstr ""
 
-#: builtin/grep.c:749
+#: builtin/grep.c:663
 msgid "descend at most <depth> levels"
 msgstr ""
 
-#: builtin/grep.c:753
+#: builtin/grep.c:667
 msgid "use extended POSIX regular expressions"
 msgstr ""
 
-#: builtin/grep.c:756
+#: builtin/grep.c:670
 msgid "use basic POSIX regular expressions (default)"
 msgstr ""
 
-#: builtin/grep.c:759
+#: builtin/grep.c:673
 msgid "interpret patterns as fixed strings"
 msgstr ""
 
-#: builtin/grep.c:762
+#: builtin/grep.c:676
 msgid "use Perl-compatible regular expressions"
 msgstr ""
 
-#: builtin/grep.c:765
+#: builtin/grep.c:679
 msgid "show line numbers"
 msgstr ""
 
-#: builtin/grep.c:766
+#: builtin/grep.c:680
 msgid "don't show filenames"
 msgstr ""
 
-#: builtin/grep.c:767
+#: builtin/grep.c:681
 msgid "show filenames"
 msgstr ""
 
-#: builtin/grep.c:769
+#: builtin/grep.c:683
 msgid "show filenames relative to top directory"
 msgstr ""
 
-#: builtin/grep.c:771
+#: builtin/grep.c:685
 msgid "show only filenames instead of matching lines"
 msgstr ""
 
-#: builtin/grep.c:773
+#: builtin/grep.c:687
 msgid "synonym for --files-with-matches"
 msgstr ""
 
-#: builtin/grep.c:776
+#: builtin/grep.c:690
 msgid "show only the names of files without match"
 msgstr ""
 
-#: builtin/grep.c:778
+#: builtin/grep.c:692
 msgid "print NUL after filenames"
 msgstr ""
 
-#: builtin/grep.c:780
+#: builtin/grep.c:694
 msgid "show the number of matches instead of matching lines"
 msgstr ""
 
-#: builtin/grep.c:781
+#: builtin/grep.c:695
 msgid "highlight matches"
 msgstr ""
 
-#: builtin/grep.c:783
+#: builtin/grep.c:697
 msgid "print empty line between matches from different files"
 msgstr ""
 
-#: builtin/grep.c:785
+#: builtin/grep.c:699
 msgid "show filename only once above matches from same file"
 msgstr ""
 
-#: builtin/grep.c:788
+#: builtin/grep.c:702
 msgid "show <n> context lines before and after matches"
 msgstr ""
 
-#: builtin/grep.c:791
+#: builtin/grep.c:705
 msgid "show <n> context lines before matches"
 msgstr ""
 
-#: builtin/grep.c:793
+#: builtin/grep.c:707
 msgid "show <n> context lines after matches"
 msgstr ""
 
-#: builtin/grep.c:794
+#: builtin/grep.c:708
 msgid "shortcut for -C NUM"
 msgstr ""
 
-#: builtin/grep.c:797
+#: builtin/grep.c:711
 msgid "show a line with the function name before matches"
 msgstr ""
 
-#: builtin/grep.c:799
+#: builtin/grep.c:713
 msgid "show the surrounding function"
 msgstr ""
 
-#: builtin/grep.c:802
+#: builtin/grep.c:716
 msgid "read patterns from file"
 msgstr ""
 
-#: builtin/grep.c:804
+#: builtin/grep.c:718
 msgid "match <pattern>"
 msgstr ""
 
-#: builtin/grep.c:806
+#: builtin/grep.c:720
 msgid "combine patterns specified with -e"
 msgstr ""
 
-#: builtin/grep.c:818
+#: builtin/grep.c:732
 msgid "indicate hit with exit status without output"
 msgstr ""
 
-#: builtin/grep.c:820
+#: builtin/grep.c:734
 msgid "show only matches from files that match all patterns"
 msgstr ""
 
-#: builtin/grep.c:822
+#: builtin/grep.c:736
 msgid "show parse tree for grep expression"
 msgstr ""
 
-#: builtin/grep.c:826
+#: builtin/grep.c:740
 msgid "pager"
 msgstr ""
 
-#: builtin/grep.c:826
+#: builtin/grep.c:740
 msgid "show matching files in the pager"
 msgstr ""
 
-#: builtin/grep.c:829
+#: builtin/grep.c:743
 msgid "allow calling of grep(1) (ignored by this build)"
 msgstr ""
 
-#: builtin/grep.c:830 builtin/show-ref.c:201
+#: builtin/grep.c:744 builtin/show-ref.c:184
 msgid "show usage"
 msgstr ""
 
-#: builtin/grep.c:921
+#: builtin/grep.c:811
 msgid "no pattern given."
 msgstr ""
 
-#: builtin/grep.c:935
+#: builtin/grep.c:825
 #, c-format
 msgid "bad object %s"
 msgstr ""
 
-#: builtin/grep.c:976
+#: builtin/grep.c:866
 msgid "--open-files-in-pager only works on the worktree"
 msgstr ""
 
-#: builtin/grep.c:999
+#: builtin/grep.c:889
 msgid "--cached or --untracked cannot be used with --no-index."
 msgstr ""
 
-#: builtin/grep.c:1004
+#: builtin/grep.c:894
 msgid "--no-index or --untracked cannot be used with revs."
 msgstr ""
 
-#: builtin/grep.c:1007
+#: builtin/grep.c:897
 msgid "--[no-]exclude-standard cannot be used for tracked contents."
 msgstr ""
 
-#: builtin/grep.c:1015
+#: builtin/grep.c:905
 msgid "both --cached and trees are given."
 msgstr ""
 
@@ -5114,219 +5132,219 @@ msgstr ""
 msgid "Final output: %d %s\n"
 msgstr ""
 
-#: builtin/log.c:403 builtin/log.c:494
+#: builtin/log.c:405 builtin/log.c:497
 #, c-format
 msgid "Could not read object %s"
 msgstr ""
 
-#: builtin/log.c:518
+#: builtin/log.c:521
 #, c-format
 msgid "Unknown type: %d"
 msgstr ""
 
-#: builtin/log.c:608
+#: builtin/log.c:613
 msgid "format.headers without value"
 msgstr ""
 
-#: builtin/log.c:682
+#: builtin/log.c:687
 msgid "name of output directory is too long"
 msgstr ""
 
-#: builtin/log.c:693
+#: builtin/log.c:698
 #, c-format
 msgid "Cannot open patch file %s"
 msgstr ""
 
-#: builtin/log.c:707
+#: builtin/log.c:712
 msgid "Need exactly one range."
 msgstr ""
 
-#: builtin/log.c:715
+#: builtin/log.c:720
 msgid "Not a range."
 msgstr ""
 
-#: builtin/log.c:789
+#: builtin/log.c:794
 msgid "Cover letter needs email format"
 msgstr ""
 
-#: builtin/log.c:862
+#: builtin/log.c:867
 #, c-format
 msgid "insane in-reply-to: %s"
 msgstr ""
 
-#: builtin/log.c:890
+#: builtin/log.c:895
 msgid "git format-patch [options] [<since> | <revision range>]"
 msgstr ""
 
-#: builtin/log.c:935
+#: builtin/log.c:940
 msgid "Two output directories?"
 msgstr ""
 
-#: builtin/log.c:1063
+#: builtin/log.c:1068
 msgid "use [PATCH n/m] even with a single patch"
 msgstr ""
 
-#: builtin/log.c:1066
+#: builtin/log.c:1071
 msgid "use [PATCH] even with multiple patches"
 msgstr ""
 
-#: builtin/log.c:1070
+#: builtin/log.c:1075
 msgid "print patches to standard out"
 msgstr ""
 
-#: builtin/log.c:1072
+#: builtin/log.c:1077
 msgid "generate a cover letter"
 msgstr ""
 
-#: builtin/log.c:1074
+#: builtin/log.c:1079
 msgid "use simple number sequence for output file names"
 msgstr ""
 
-#: builtin/log.c:1075
+#: builtin/log.c:1080
 msgid "sfx"
 msgstr ""
 
-#: builtin/log.c:1076
+#: builtin/log.c:1081
 msgid "use <sfx> instead of '.patch'"
 msgstr ""
 
-#: builtin/log.c:1078
+#: builtin/log.c:1083
 msgid "start numbering patches at <n> instead of 1"
 msgstr ""
 
-#: builtin/log.c:1080
+#: builtin/log.c:1085
 msgid "Use [<prefix>] instead of [PATCH]"
 msgstr ""
 
-#: builtin/log.c:1083
+#: builtin/log.c:1088
 msgid "store resulting files in <dir>"
 msgstr ""
 
-#: builtin/log.c:1086
+#: builtin/log.c:1091
 msgid "don't strip/add [PATCH]"
 msgstr ""
 
-#: builtin/log.c:1089
+#: builtin/log.c:1094
 msgid "don't output binary diffs"
 msgstr ""
 
-#: builtin/log.c:1091
+#: builtin/log.c:1096
 msgid "don't include a patch matching a commit upstream"
 msgstr ""
 
-#: builtin/log.c:1093
+#: builtin/log.c:1098
 msgid "show patch format instead of default (patch + stat)"
 msgstr ""
 
-#: builtin/log.c:1095
+#: builtin/log.c:1100
 msgid "Messaging"
 msgstr ""
 
-#: builtin/log.c:1096
+#: builtin/log.c:1101
 msgid "header"
 msgstr ""
 
-#: builtin/log.c:1097
+#: builtin/log.c:1102
 msgid "add email header"
 msgstr ""
 
-#: builtin/log.c:1098 builtin/log.c:1100
+#: builtin/log.c:1103 builtin/log.c:1105
 msgid "email"
 msgstr ""
 
-#: builtin/log.c:1098
+#: builtin/log.c:1103
 msgid "add To: header"
 msgstr ""
 
-#: builtin/log.c:1100
+#: builtin/log.c:1105
 msgid "add Cc: header"
 msgstr ""
 
-#: builtin/log.c:1102
+#: builtin/log.c:1107
 msgid "message-id"
 msgstr ""
 
-#: builtin/log.c:1103
+#: builtin/log.c:1108
 msgid "make first mail a reply to <message-id>"
 msgstr ""
 
-#: builtin/log.c:1104 builtin/log.c:1107
+#: builtin/log.c:1109 builtin/log.c:1112
 msgid "boundary"
 msgstr ""
 
-#: builtin/log.c:1105
+#: builtin/log.c:1110
 msgid "attach the patch"
 msgstr ""
 
-#: builtin/log.c:1108
+#: builtin/log.c:1113
 msgid "inline the patch"
 msgstr ""
 
-#: builtin/log.c:1112
+#: builtin/log.c:1117
 msgid "enable message threading, styles: shallow, deep"
 msgstr ""
 
-#: builtin/log.c:1114
+#: builtin/log.c:1119
 msgid "signature"
 msgstr ""
 
-#: builtin/log.c:1115
+#: builtin/log.c:1120
 msgid "add a signature"
 msgstr ""
 
-#: builtin/log.c:1117
+#: builtin/log.c:1122
 msgid "don't print the patch filenames"
 msgstr ""
 
-#: builtin/log.c:1157
+#: builtin/log.c:1163
 #, c-format
 msgid "bogus committer info %s"
 msgstr ""
 
-#: builtin/log.c:1202
+#: builtin/log.c:1208
 msgid "-n and -k are mutually exclusive."
 msgstr ""
 
-#: builtin/log.c:1204
+#: builtin/log.c:1210
 msgid "--subject-prefix and -k are mutually exclusive."
 msgstr ""
 
-#: builtin/log.c:1212
+#: builtin/log.c:1218
 msgid "--name-only does not make sense"
 msgstr ""
 
-#: builtin/log.c:1214
+#: builtin/log.c:1220
 msgid "--name-status does not make sense"
 msgstr ""
 
-#: builtin/log.c:1216
+#: builtin/log.c:1222
 msgid "--check does not make sense"
 msgstr ""
 
-#: builtin/log.c:1239
+#: builtin/log.c:1245
 msgid "standard output, or directory, which one?"
 msgstr ""
 
-#: builtin/log.c:1241
+#: builtin/log.c:1247
 #, c-format
 msgid "Could not create directory '%s'"
 msgstr ""
 
-#: builtin/log.c:1394
+#: builtin/log.c:1400
 msgid "Failed to create output files"
 msgstr ""
 
-#: builtin/log.c:1443
+#: builtin/log.c:1449
 msgid "git cherry [-v] [<upstream> [<head> [<limit>]]]"
 msgstr ""
 
-#: builtin/log.c:1498
+#: builtin/log.c:1504
 #, c-format
 msgid ""
 "Could not find a tracked remote branch, please specify <upstream> manually.\n"
 msgstr ""
 
-#: builtin/log.c:1511 builtin/log.c:1513 builtin/log.c:1525
+#: builtin/log.c:1517 builtin/log.c:1519 builtin/log.c:1531
 #, c-format
 msgid "Unknown commit %s"
 msgstr ""
@@ -5603,35 +5621,31 @@ msgstr ""
 msgid "git write-tree failed to write a tree"
 msgstr ""
 
-#: builtin/merge.c:678
-msgid "failed to read the cache"
-msgstr ""
-
-#: builtin/merge.c:709
+#: builtin/merge.c:656
 msgid "Not handling anything other than two heads merge."
 msgstr ""
 
-#: builtin/merge.c:723
+#: builtin/merge.c:670
 #, c-format
 msgid "Unknown option for merge-recursive: -X%s"
 msgstr ""
 
-#: builtin/merge.c:737
+#: builtin/merge.c:684
 #, c-format
 msgid "unable to write %s"
 msgstr ""
 
-#: builtin/merge.c:876
+#: builtin/merge.c:773
 #, c-format
 msgid "Could not read from '%s'"
 msgstr ""
 
-#: builtin/merge.c:885
+#: builtin/merge.c:782
 #, c-format
 msgid "Not committing merge; use 'git commit' to complete the merge.\n"
 msgstr ""
 
-#: builtin/merge.c:891
+#: builtin/merge.c:788
 msgid ""
 "Please enter a commit message to explain why this merge is necessary,\n"
 "especially if it merges an updated upstream into a topic branch.\n"
@@ -5640,140 +5654,140 @@ msgid ""
 "the commit.\n"
 msgstr ""
 
-#: builtin/merge.c:915
+#: builtin/merge.c:812
 msgid "Empty commit message."
 msgstr ""
 
-#: builtin/merge.c:927
+#: builtin/merge.c:824
 #, c-format
 msgid "Wonderful.\n"
 msgstr ""
 
-#: builtin/merge.c:992
+#: builtin/merge.c:889
 #, c-format
 msgid "Automatic merge failed; fix conflicts and then commit the result.\n"
 msgstr ""
 
-#: builtin/merge.c:1008
+#: builtin/merge.c:905
 #, c-format
 msgid "'%s' is not a commit"
 msgstr ""
 
-#: builtin/merge.c:1049
+#: builtin/merge.c:946
 msgid "No current branch."
 msgstr ""
 
-#: builtin/merge.c:1051
+#: builtin/merge.c:948
 msgid "No remote for the current branch."
 msgstr ""
 
-#: builtin/merge.c:1053
+#: builtin/merge.c:950
 msgid "No default upstream defined for the current branch."
 msgstr ""
 
-#: builtin/merge.c:1058
+#: builtin/merge.c:955
 #, c-format
 msgid "No remote tracking branch for %s from %s"
 msgstr ""
 
-#: builtin/merge.c:1145 builtin/merge.c:1302
+#: builtin/merge.c:1042 builtin/merge.c:1199
 #, c-format
 msgid "%s - not something we can merge"
 msgstr ""
 
-#: builtin/merge.c:1213
+#: builtin/merge.c:1110
 msgid "There is no merge to abort (MERGE_HEAD missing)."
 msgstr ""
 
-#: builtin/merge.c:1229 git-pull.sh:31
+#: builtin/merge.c:1126 git-pull.sh:31
 msgid ""
 "You have not concluded your merge (MERGE_HEAD exists).\n"
 "Please, commit your changes before you can merge."
 msgstr ""
 
-#: builtin/merge.c:1232 git-pull.sh:34
+#: builtin/merge.c:1129 git-pull.sh:34
 msgid "You have not concluded your merge (MERGE_HEAD exists)."
 msgstr ""
 
-#: builtin/merge.c:1236
+#: builtin/merge.c:1133
 msgid ""
 "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n"
 "Please, commit your changes before you can merge."
 msgstr ""
 
-#: builtin/merge.c:1239
+#: builtin/merge.c:1136
 msgid "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists)."
 msgstr ""
 
-#: builtin/merge.c:1248
+#: builtin/merge.c:1145
 msgid "You cannot combine --squash with --no-ff."
 msgstr ""
 
-#: builtin/merge.c:1253
+#: builtin/merge.c:1150
 msgid "You cannot combine --no-ff with --ff-only."
 msgstr ""
 
-#: builtin/merge.c:1260
+#: builtin/merge.c:1157
 msgid "No commit specified and merge.defaultToUpstream not set."
 msgstr ""
 
-#: builtin/merge.c:1292
+#: builtin/merge.c:1189
 msgid "Can merge only exactly one commit into empty head"
 msgstr ""
 
-#: builtin/merge.c:1295
+#: builtin/merge.c:1192
 msgid "Squash commit into empty head not supported yet"
 msgstr ""
 
-#: builtin/merge.c:1297
+#: builtin/merge.c:1194
 msgid "Non-fast-forward commit does not make sense into an empty head"
 msgstr ""
 
-#: builtin/merge.c:1412
+#: builtin/merge.c:1309
 #, c-format
 msgid "Updating %s..%s\n"
 msgstr ""
 
-#: builtin/merge.c:1450
+#: builtin/merge.c:1348
 #, c-format
 msgid "Trying really trivial in-index merge...\n"
 msgstr ""
 
-#: builtin/merge.c:1457
+#: builtin/merge.c:1355
 #, c-format
 msgid "Nope.\n"
 msgstr ""
 
-#: builtin/merge.c:1489
+#: builtin/merge.c:1387
 msgid "Not possible to fast-forward, aborting."
 msgstr ""
 
-#: builtin/merge.c:1512 builtin/merge.c:1591
+#: builtin/merge.c:1410 builtin/merge.c:1489
 #, c-format
 msgid "Rewinding the tree to pristine...\n"
 msgstr ""
 
-#: builtin/merge.c:1516
+#: builtin/merge.c:1414
 #, c-format
 msgid "Trying merge strategy %s...\n"
 msgstr ""
 
-#: builtin/merge.c:1582
+#: builtin/merge.c:1480
 #, c-format
 msgid "No merge strategy handled the merge.\n"
 msgstr ""
 
-#: builtin/merge.c:1584
+#: builtin/merge.c:1482
 #, c-format
 msgid "Merge with strategy %s failed.\n"
 msgstr ""
 
-#: builtin/merge.c:1593
+#: builtin/merge.c:1491
 #, c-format
 msgid "Using the %s to prepare resolving by hand.\n"
 msgstr ""
 
-#: builtin/merge.c:1605
+#: builtin/merge.c:1503
 #, c-format
 msgid "Automatic merge went well; stopped before committing as requested\n"
 msgstr ""
@@ -6323,143 +6337,143 @@ msgstr ""
 msgid "deflate error (%d)"
 msgstr ""
 
-#: builtin/pack-objects.c:2398
+#: builtin/pack-objects.c:2397
 #, c-format
 msgid "unsupported index version %s"
 msgstr ""
 
-#: builtin/pack-objects.c:2402
+#: builtin/pack-objects.c:2401
 #, c-format
 msgid "bad index version '%s'"
 msgstr ""
 
-#: builtin/pack-objects.c:2425
+#: builtin/pack-objects.c:2424
 #, c-format
 msgid "option %s does not accept negative form"
 msgstr ""
 
-#: builtin/pack-objects.c:2429
+#: builtin/pack-objects.c:2428
 #, c-format
 msgid "unable to parse value '%s' for option %s"
 msgstr ""
 
-#: builtin/pack-objects.c:2448
+#: builtin/pack-objects.c:2447
 msgid "do not show progress meter"
 msgstr ""
 
-#: builtin/pack-objects.c:2450
+#: builtin/pack-objects.c:2449
 msgid "show progress meter"
 msgstr ""
 
-#: builtin/pack-objects.c:2452
+#: builtin/pack-objects.c:2451
 msgid "show progress meter during object writing phase"
 msgstr ""
 
-#: builtin/pack-objects.c:2455
+#: builtin/pack-objects.c:2454
 msgid "similar to --all-progress when progress meter is shown"
 msgstr ""
 
-#: builtin/pack-objects.c:2456
+#: builtin/pack-objects.c:2455
 msgid "version[,offset]"
 msgstr ""
 
-#: builtin/pack-objects.c:2457
+#: builtin/pack-objects.c:2456
 msgid "write the pack index file in the specified idx format version"
 msgstr ""
 
-#: builtin/pack-objects.c:2460
+#: builtin/pack-objects.c:2459
 msgid "maximum size of each output pack file"
 msgstr ""
 
-#: builtin/pack-objects.c:2462
+#: builtin/pack-objects.c:2461
 msgid "ignore borrowed objects from alternate object store"
 msgstr ""
 
-#: builtin/pack-objects.c:2464
+#: builtin/pack-objects.c:2463
 msgid "ignore packed objects"
 msgstr ""
 
-#: builtin/pack-objects.c:2466
+#: builtin/pack-objects.c:2465
 msgid "limit pack window by objects"
 msgstr ""
 
-#: builtin/pack-objects.c:2468
+#: builtin/pack-objects.c:2467
 msgid "limit pack window by memory in addition to object limit"
 msgstr ""
 
-#: builtin/pack-objects.c:2470
+#: builtin/pack-objects.c:2469
 msgid "maximum length of delta chain allowed in the resulting pack"
 msgstr ""
 
-#: builtin/pack-objects.c:2472
+#: builtin/pack-objects.c:2471
 msgid "reuse existing deltas"
 msgstr ""
 
-#: builtin/pack-objects.c:2474
+#: builtin/pack-objects.c:2473
 msgid "reuse existing objects"
 msgstr ""
 
-#: builtin/pack-objects.c:2476
+#: builtin/pack-objects.c:2475
 msgid "use OFS_DELTA objects"
 msgstr ""
 
-#: builtin/pack-objects.c:2478
+#: builtin/pack-objects.c:2477
 msgid "use threads when searching for best delta matches"
 msgstr ""
 
-#: builtin/pack-objects.c:2480
+#: builtin/pack-objects.c:2479
 msgid "do not create an empty pack output"
 msgstr ""
 
-#: builtin/pack-objects.c:2482
+#: builtin/pack-objects.c:2481
 msgid "read revision arguments from standard input"
 msgstr ""
 
-#: builtin/pack-objects.c:2484
+#: builtin/pack-objects.c:2483
 msgid "limit the objects to those that are not yet packed"
 msgstr ""
 
-#: builtin/pack-objects.c:2487
+#: builtin/pack-objects.c:2486
 msgid "include objects reachable from any reference"
 msgstr ""
 
-#: builtin/pack-objects.c:2490
+#: builtin/pack-objects.c:2489
 msgid "include objects referred by reflog entries"
 msgstr ""
 
-#: builtin/pack-objects.c:2493
+#: builtin/pack-objects.c:2492
 msgid "output pack to stdout"
 msgstr ""
 
-#: builtin/pack-objects.c:2495
+#: builtin/pack-objects.c:2494
 msgid "include tag objects that refer to objects to be packed"
 msgstr ""
 
-#: builtin/pack-objects.c:2497
+#: builtin/pack-objects.c:2496
 msgid "keep unreachable objects"
 msgstr ""
 
-#: builtin/pack-objects.c:2498 parse-options.h:141
+#: builtin/pack-objects.c:2497 parse-options.h:141
 msgid "time"
 msgstr ""
 
-#: builtin/pack-objects.c:2499
+#: builtin/pack-objects.c:2498
 msgid "unpack unreachable objects newer than <time>"
 msgstr ""
 
-#: builtin/pack-objects.c:2502
+#: builtin/pack-objects.c:2501
 msgid "create thin packs"
 msgstr ""
 
-#: builtin/pack-objects.c:2504
+#: builtin/pack-objects.c:2503
 msgid "ignore packs that have companion .keep file"
 msgstr ""
 
-#: builtin/pack-objects.c:2506
+#: builtin/pack-objects.c:2505
 msgid "pack compression level"
 msgstr ""
 
-#: builtin/pack-objects.c:2508
+#: builtin/pack-objects.c:2507
 msgid "do not hide commits by grafts"
 msgstr ""
 
@@ -7280,15 +7294,15 @@ msgstr ""
 msgid "git replace -l [<pattern>]"
 msgstr ""
 
-#: builtin/replace.c:118
+#: builtin/replace.c:121
 msgid "list replace refs"
 msgstr ""
 
-#: builtin/replace.c:119
+#: builtin/replace.c:122
 msgid "delete replace refs"
 msgstr ""
 
-#: builtin/replace.c:120
+#: builtin/replace.c:123
 msgid "replace the ref if it exists"
 msgstr ""
 
@@ -7526,57 +7540,64 @@ msgstr ""
 msgid "cherry-pick failed"
 msgstr ""
 
-#: builtin/rm.c:14
+#: builtin/rm.c:15
 msgid "git rm [options] [--] <file>..."
 msgstr ""
 
-#: builtin/rm.c:109
+#: builtin/rm.c:64 builtin/rm.c:186
+#, c-format
+msgid ""
+"submodule '%s' (or one of its nested submodules) uses a .git directory\n"
+"(use 'rm -rf' if you really want to remove it including all of its history)"
+msgstr ""
+
+#: builtin/rm.c:174
 #, c-format
 msgid ""
 "'%s' has staged content different from both the file and the HEAD\n"
 "(use -f to force removal)"
 msgstr ""
 
-#: builtin/rm.c:115
+#: builtin/rm.c:180
 #, c-format
 msgid ""
 "'%s' has changes staged in the index\n"
 "(use --cached to keep the file, or -f to force removal)"
 msgstr ""
 
-#: builtin/rm.c:119
+#: builtin/rm.c:191
 #, c-format
 msgid ""
 "'%s' has local modifications\n"
 "(use --cached to keep the file, or -f to force removal)"
 msgstr ""
 
-#: builtin/rm.c:134
+#: builtin/rm.c:207
 msgid "do not list removed files"
 msgstr ""
 
-#: builtin/rm.c:135
+#: builtin/rm.c:208
 msgid "only remove from the index"
 msgstr ""
 
-#: builtin/rm.c:136
+#: builtin/rm.c:209
 msgid "override the up-to-date check"
 msgstr ""
 
-#: builtin/rm.c:137
+#: builtin/rm.c:210
 msgid "allow recursive removal"
 msgstr ""
 
-#: builtin/rm.c:139
+#: builtin/rm.c:212
 msgid "exit with a zero status even if nothing matched"
 msgstr ""
 
-#: builtin/rm.c:194
+#: builtin/rm.c:268
 #, c-format
 msgid "not removing '%s' recursively without -r"
 msgstr ""
 
-#: builtin/rm.c:230
+#: builtin/rm.c:307
 #, c-format
 msgid "git rm: unable to remove %s"
 msgstr ""
@@ -7696,35 +7717,35 @@ msgstr ""
 msgid "git show-ref --exclude-existing[=pattern] < ref-list"
 msgstr ""
 
-#: builtin/show-ref.c:182
+#: builtin/show-ref.c:165
 msgid "only show tags (can be combined with heads)"
 msgstr ""
 
-#: builtin/show-ref.c:183
+#: builtin/show-ref.c:166
 msgid "only show heads (can be combined with tags)"
 msgstr ""
 
-#: builtin/show-ref.c:184
+#: builtin/show-ref.c:167
 msgid "stricter reference checking, requires exact ref path"
 msgstr ""
 
-#: builtin/show-ref.c:187 builtin/show-ref.c:189
+#: builtin/show-ref.c:170 builtin/show-ref.c:172
 msgid "show the HEAD reference"
 msgstr ""
 
-#: builtin/show-ref.c:191
+#: builtin/show-ref.c:174
 msgid "dereference tags into object IDs"
 msgstr ""
 
-#: builtin/show-ref.c:193
+#: builtin/show-ref.c:176
 msgid "only show SHA1 hash using <n> digits"
 msgstr ""
 
-#: builtin/show-ref.c:197
+#: builtin/show-ref.c:180
 msgid "do not print results to stdout (useful with --verify)"
 msgstr ""
 
-#: builtin/show-ref.c:199
+#: builtin/show-ref.c:182
 msgid "show refs from stdin that aren't in local repository"
 msgstr ""
 
@@ -7732,19 +7753,27 @@ msgstr ""
 msgid "git symbolic-ref [options] name [ref]"
 msgstr ""
 
-#: builtin/symbolic-ref.c:38
+#: builtin/symbolic-ref.c:8
+msgid "git symbolic-ref -d [-q] name"
+msgstr ""
+
+#: builtin/symbolic-ref.c:40
 msgid "suppress error message for non-symbolic (detached) refs"
 msgstr ""
 
-#: builtin/symbolic-ref.c:39
+#: builtin/symbolic-ref.c:41
+msgid "delete symbolic ref"
+msgstr ""
+
+#: builtin/symbolic-ref.c:42
 msgid "shorten ref output"
 msgstr ""
 
-#: builtin/symbolic-ref.c:40 builtin/update-ref.c:18
+#: builtin/symbolic-ref.c:43 builtin/update-ref.c:18
 msgid "reason"
 msgstr ""
 
-#: builtin/symbolic-ref.c:40 builtin/update-ref.c:18
+#: builtin/symbolic-ref.c:43 builtin/update-ref.c:18
 msgid "reason of the update"
 msgstr ""
 
@@ -7954,111 +7983,111 @@ msgstr ""
 msgid "git update-index [options] [--] [<file>...]"
 msgstr ""
 
-#: builtin/update-index.c:717
+#: builtin/update-index.c:718
 msgid "continue refresh even when index needs update"
 msgstr ""
 
-#: builtin/update-index.c:720
+#: builtin/update-index.c:721
 msgid "refresh: ignore submodules"
 msgstr ""
 
-#: builtin/update-index.c:723
+#: builtin/update-index.c:724
 msgid "do not ignore new files"
 msgstr ""
 
-#: builtin/update-index.c:725
+#: builtin/update-index.c:726
 msgid "let files replace directories and vice-versa"
 msgstr ""
 
-#: builtin/update-index.c:727
+#: builtin/update-index.c:728
 msgid "notice files missing from worktree"
 msgstr ""
 
-#: builtin/update-index.c:729
+#: builtin/update-index.c:730
 msgid "refresh even if index contains unmerged entries"
 msgstr ""
 
-#: builtin/update-index.c:732
+#: builtin/update-index.c:733
 msgid "refresh stat information"
 msgstr ""
 
-#: builtin/update-index.c:736
+#: builtin/update-index.c:737
 msgid "like --refresh, but ignore assume-unchanged setting"
 msgstr ""
 
-#: builtin/update-index.c:740
+#: builtin/update-index.c:741
 msgid "<mode> <object> <path>"
 msgstr ""
 
-#: builtin/update-index.c:741
+#: builtin/update-index.c:742
 msgid "add the specified entry to the index"
 msgstr ""
 
-#: builtin/update-index.c:745
+#: builtin/update-index.c:746
 msgid "(+/-)x"
 msgstr ""
 
-#: builtin/update-index.c:746
+#: builtin/update-index.c:747
 msgid "override the executable bit of the listed files"
 msgstr ""
 
-#: builtin/update-index.c:750
+#: builtin/update-index.c:751
 msgid "mark files as \"not changing\""
 msgstr ""
 
-#: builtin/update-index.c:753
+#: builtin/update-index.c:754
 msgid "clear assumed-unchanged bit"
 msgstr ""
 
-#: builtin/update-index.c:756
+#: builtin/update-index.c:757
 msgid "mark files as \"index-only\""
 msgstr ""
 
-#: builtin/update-index.c:759
+#: builtin/update-index.c:760
 msgid "clear skip-worktree bit"
 msgstr ""
 
-#: builtin/update-index.c:762
+#: builtin/update-index.c:763
 msgid "add to index only; do not add content to object database"
 msgstr ""
 
-#: builtin/update-index.c:764
+#: builtin/update-index.c:765
 msgid "remove named paths even if present in worktree"
 msgstr ""
 
-#: builtin/update-index.c:766
+#: builtin/update-index.c:767
 msgid "with --stdin: input lines are terminated by null bytes"
 msgstr ""
 
-#: builtin/update-index.c:768
+#: builtin/update-index.c:769
 msgid "read list of paths to be updated from standard input"
 msgstr ""
 
-#: builtin/update-index.c:772
+#: builtin/update-index.c:773
 msgid "add entries from standard input to the index"
 msgstr ""
 
-#: builtin/update-index.c:776
+#: builtin/update-index.c:777
 msgid "repopulate stages #2 and #3 for the listed paths"
 msgstr ""
 
-#: builtin/update-index.c:780
+#: builtin/update-index.c:781
 msgid "only update entries that differ from HEAD"
 msgstr ""
 
-#: builtin/update-index.c:784
+#: builtin/update-index.c:785
 msgid "ignore files missing from worktree"
 msgstr ""
 
-#: builtin/update-index.c:787
+#: builtin/update-index.c:788
 msgid "report actions to standard output"
 msgstr ""
 
-#: builtin/update-index.c:789
+#: builtin/update-index.c:790
 msgid "(for porcelains) forget saved unresolved conflicts"
 msgstr ""
 
-#: builtin/update-index.c:793
+#: builtin/update-index.c:794
 msgid "write index in this format"
 msgstr ""
 
@@ -8535,7 +8564,7 @@ msgstr ""
 #. The working tree and the index file is still based on the
 #. $orig_head commit, but we are merging into $curr_head.
 #. First update the working tree to match $curr_head.
-#: git-pull.sh:228
+#: git-pull.sh:229
 #, sh-format
 msgid ""
 "Warning: fetch updated the current branch head.\n"
@@ -8543,11 +8572,11 @@ msgid ""
 "Warning: commit $orig_head."
 msgstr ""
 
-#: git-pull.sh:253
+#: git-pull.sh:254
 msgid "Cannot merge multiple branches into empty head"
 msgstr ""
 
-#: git-pull.sh:257
+#: git-pull.sh:258
 msgid "Cannot rebase onto multiple branches"
 msgstr ""
 
@@ -8788,12 +8817,12 @@ msgstr ""
 msgid "(To restore them type \"git stash apply\")"
 msgstr ""
 
-#: git-submodule.sh:88
+#: git-submodule.sh:89
 #, sh-format
 msgid "cannot strip one component off url '$remoteurl'"
 msgstr ""
 
-#: git-submodule.sh:167
+#: git-submodule.sh:168
 #, sh-format
 msgid "No submodule mapping found in .gitmodules for path '$sm_path'"
 msgstr ""
@@ -8808,17 +8837,17 @@ msgstr ""
 msgid "Gitdir '$a' is part of the submodule path '$b' or vice versa"
 msgstr ""
 
-#: git-submodule.sh:312
+#: git-submodule.sh:316
 #, sh-format
 msgid "repo URL: '$repo' must be absolute or begin with ./|../"
 msgstr ""
 
-#: git-submodule.sh:329
+#: git-submodule.sh:333
 #, sh-format
 msgid "'$sm_path' already exists in the index"
 msgstr ""
 
-#: git-submodule.sh:333
+#: git-submodule.sh:337
 #, sh-format
 msgid ""
 "The following path is ignored by one of your .gitignore files:\n"
@@ -8826,151 +8855,180 @@ msgid ""
 "Use -f if you really want to add it."
 msgstr ""
 
-#: git-submodule.sh:344
+#: git-submodule.sh:355
 #, sh-format
 msgid "Adding existing repo at '$sm_path' to the index"
 msgstr ""
 
-#: git-submodule.sh:346
+#: git-submodule.sh:357
 #, sh-format
 msgid "'$sm_path' already exists and is not a valid git repo"
 msgstr ""
 
-#: git-submodule.sh:360
+#: git-submodule.sh:365
+#, sh-format
+msgid "A git directory for '$sm_name' is found locally with remote(s):"
+msgstr ""
+
+#: git-submodule.sh:367
+#, sh-format
+msgid ""
+"If you want to reuse this local git directory instead of cloning again from"
+msgstr ""
+
+#: git-submodule.sh:369
+#, sh-format
+msgid ""
+"use the '--force' option. If the local git directory is not the correct repo"
+msgstr ""
+
+#: git-submodule.sh:370
+#, sh-format
+msgid ""
+"or you are unsure what this means choose another name with the '--name' "
+"option."
+msgstr ""
+
+#: git-submodule.sh:372
+#, sh-format
+msgid "Reactivating local git directory for submodule '$sm_name'."
+msgstr ""
+
+#: git-submodule.sh:384
 #, sh-format
 msgid "Unable to checkout submodule '$sm_path'"
 msgstr ""
 
-#: git-submodule.sh:365
+#: git-submodule.sh:389
 #, sh-format
 msgid "Failed to add submodule '$sm_path'"
 msgstr ""
 
-#: git-submodule.sh:370
+#: git-submodule.sh:394
 #, sh-format
 msgid "Failed to register submodule '$sm_path'"
 msgstr ""
 
-#: git-submodule.sh:413
+#: git-submodule.sh:437
 #, sh-format
 msgid "Entering '$prefix$sm_path'"
 msgstr ""
 
-#: git-submodule.sh:427
+#: git-submodule.sh:451
 #, sh-format
 msgid "Stopping at '$sm_path'; script returned non-zero status."
 msgstr ""
 
-#: git-submodule.sh:471
+#: git-submodule.sh:495
 #, sh-format
 msgid "No url found for submodule path '$sm_path' in .gitmodules"
 msgstr ""
 
-#: git-submodule.sh:480
+#: git-submodule.sh:504
 #, sh-format
 msgid "Failed to register url for submodule path '$sm_path'"
 msgstr ""
 
-#: git-submodule.sh:482
+#: git-submodule.sh:506
 #, sh-format
 msgid "Submodule '$name' ($url) registered for path '$sm_path'"
 msgstr ""
 
-#: git-submodule.sh:490
+#: git-submodule.sh:514
 #, sh-format
 msgid "Failed to register update mode for submodule path '$sm_path'"
 msgstr ""
 
-#: git-submodule.sh:590
+#: git-submodule.sh:614
 #, sh-format
 msgid ""
 "Submodule path '$sm_path' not initialized\n"
 "Maybe you want to use 'update --init'?"
 msgstr ""
 
-#: git-submodule.sh:603
+#: git-submodule.sh:627
 #, sh-format
 msgid "Unable to find current revision in submodule path '$sm_path'"
 msgstr ""
 
-#: git-submodule.sh:622
+#: git-submodule.sh:646
 #, sh-format
 msgid "Unable to fetch in submodule path '$sm_path'"
 msgstr ""
 
-#: git-submodule.sh:636
+#: git-submodule.sh:660
 #, sh-format
 msgid "Unable to rebase '$sha1' in submodule path '$sm_path'"
 msgstr ""
 
-#: git-submodule.sh:637
+#: git-submodule.sh:661
 #, sh-format
 msgid "Submodule path '$sm_path': rebased into '$sha1'"
 msgstr ""
 
-#: git-submodule.sh:642
+#: git-submodule.sh:666
 #, sh-format
 msgid "Unable to merge '$sha1' in submodule path '$sm_path'"
 msgstr ""
 
-#: git-submodule.sh:643
+#: git-submodule.sh:667
 #, sh-format
 msgid "Submodule path '$sm_path': merged in '$sha1'"
 msgstr ""
 
-#: git-submodule.sh:648
+#: git-submodule.sh:672
 #, sh-format
 msgid "Unable to checkout '$sha1' in submodule path '$sm_path'"
 msgstr ""
 
-#: git-submodule.sh:649
+#: git-submodule.sh:673
 #, sh-format
 msgid "Submodule path '$sm_path': checked out '$sha1'"
 msgstr ""
 
-#: git-submodule.sh:671 git-submodule.sh:995
+#: git-submodule.sh:695 git-submodule.sh:1017
 #, sh-format
 msgid "Failed to recurse into submodule path '$sm_path'"
 msgstr ""
 
-#: git-submodule.sh:779
+#: git-submodule.sh:803
 msgid "The --cached option cannot be used with the --files option"
 msgstr ""
 
 #. unexpected type
-#: git-submodule.sh:819
+#: git-submodule.sh:843
 #, sh-format
 msgid "unexpected mode $mod_dst"
 msgstr ""
 
-#: git-submodule.sh:837
+#: git-submodule.sh:861
 #, sh-format
 msgid "  Warn: $name doesn't contain commit $sha1_src"
 msgstr ""
 
-#: git-submodule.sh:840
+#: git-submodule.sh:864
 #, sh-format
 msgid "  Warn: $name doesn't contain commit $sha1_dst"
 msgstr ""
 
-#: git-submodule.sh:843
+#: git-submodule.sh:867
 #, sh-format
 msgid "  Warn: $name doesn't contain commits $sha1_src and $sha1_dst"
 msgstr ""
 
-#: git-submodule.sh:868
+#: git-submodule.sh:892
 msgid "blob"
 msgstr ""
 
-#: git-submodule.sh:906
+#: git-submodule.sh:930
 msgid "# Submodules changed but not updated:"
 msgstr ""
 
-#: git-submodule.sh:908
+#: git-submodule.sh:932
 msgid "# Submodule changes to be committed:"
 msgstr ""
 
-#: git-submodule.sh:1054
+#: git-submodule.sh:1080
 #, sh-format
-msgid "Synchronizing submodule url for '$name'"
+msgid "Synchronizing submodule url for '$prefix$sm_path'"
 msgstr ""
index 9b3aa744bc781cb3963e7eefd91bda8a754a8a47..90df113239d5632a503bcc8343652f7d01f98d1d 100644 (file)
--- a/po/sv.po
+++ b/po/sv.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: git 1.7.12\n"
 "Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2012-10-16 08:38+0800\n"
-"PO-Revision-Date: 2012-10-16 08:36+0100\n"
+"POT-Creation-Date: 2012-11-23 14:27+0800\n"
+"PO-Revision-Date: 2012-11-23 08:53+0100\n"
 "Last-Translator: Peter Krefting <peter@softwolves.pp.se>\n"
 "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
 "Language: sv\n"
@@ -65,7 +65,7 @@ msgstr "fmt"
 msgid "archive format"
 msgstr "arkivformat"
 
-#: archive.c:323 builtin/log.c:1079
+#: archive.c:323 builtin/log.c:1084
 msgid "prefix"
 msgstr "prefix"
 
@@ -73,9 +73,9 @@ msgstr "prefix"
 msgid "prepend prefix to each pathname in the archive"
 msgstr "lägg till prefix till varje sökväg i arkivet"
 
-#: archive.c:325 builtin/archive.c:91 builtin/blame.c:2389
-#: builtin/blame.c:2390 builtin/config.c:56 builtin/fast-export.c:642
-#: builtin/fast-export.c:644 builtin/grep.c:801 builtin/hash-object.c:77
+#: archive.c:325 builtin/archive.c:91 builtin/blame.c:2390
+#: builtin/blame.c:2391 builtin/config.c:55 builtin/fast-export.c:642
+#: builtin/fast-export.c:644 builtin/grep.c:715 builtin/hash-object.c:77
 #: builtin/ls-files.c:494 builtin/ls-files.c:497 builtin/notes.c:540
 #: builtin/notes.c:697 builtin/read-tree.c:107 parse-options.h:149
 msgid "file"
@@ -125,6 +125,14 @@ msgstr "kommando"
 msgid "path to the remote git-upload-archive command"
 msgstr "sökväg till kommandot git-upload-archive på fjärren"
 
+#: attr.c:259
+msgid ""
+"Negative patterns are forbidden in git attributes\n"
+"Use '\\!' for literal leading exclamation."
+msgstr ""
+"Negativa mönster är förbjudna i git-attribut\n"
+"Använd '\\!' för att inleda med ett utropstecken."
+
 #: bundle.c:36
 #, c-format
 msgid "'%s' does not look like a v2 bundle file"
@@ -135,7 +143,7 @@ msgstr "'%s' ser inte ut som en v2-bundle-fil"
 msgid "unrecognized header: %s%s (%d)"
 msgstr "okänt huvud: %s%s (%d)"
 
-#: bundle.c:89 builtin/commit.c:672
+#: bundle.c:89 builtin/commit.c:674
 #, c-format
 msgid "could not open '%s'"
 msgstr "kunde inte öppna \"%s\""
@@ -145,7 +153,7 @@ msgid "Repository lacks these prerequisite commits:"
 msgstr "Arkivet saknar dessa nödvändiga incheckningar:"
 
 #: bundle.c:164 sequencer.c:562 sequencer.c:994 builtin/log.c:290
-#: builtin/log.c:727 builtin/log.c:1313 builtin/log.c:1529 builtin/merge.c:347
+#: builtin/log.c:732 builtin/log.c:1319 builtin/log.c:1535 builtin/merge.c:347
 #: builtin/shortlog.c:181
 msgid "revision walk setup failed"
 msgstr "misslyckades skapa revisionstraversering"
@@ -172,7 +180,7 @@ msgstr[1] "Paketet (bundlen) kräver dessa %d referenser"
 msgid "rev-list died"
 msgstr "rev-list dog"
 
-#: bundle.c:300 builtin/log.c:1209 builtin/shortlog.c:284
+#: bundle.c:300 builtin/log.c:1215 builtin/shortlog.c:284
 #, c-format
 msgid "unrecognized argument: %s"
 msgstr "okänt argument: %s"
@@ -298,17 +306,17 @@ msgid_plural "%lu years ago"
 msgstr[0] "%lu år sedan"
 msgstr[1] "%lu år sedan"
 
-#: diff.c:105
+#: diff.c:111
 #, c-format
-msgid "  Failed to parse dirstat cut-off percentage '%.*s'\n"
-msgstr "  Misslyckades tolka dirstat-avskärningsprocentandel \"%.*s\"\n"
+msgid "  Failed to parse dirstat cut-off percentage '%s'\n"
+msgstr "  Misslyckades tolka dirstat-avskärningsprocentandel \"%s\"\n"
 
-#: diff.c:110
+#: diff.c:116
 #, c-format
-msgid "  Unknown dirstat parameter '%.*s'\n"
-msgstr "  Okänd dirstat-parameter \"%.*s\"\n"
+msgid "  Unknown dirstat parameter '%s'\n"
+msgstr "  Okänd dirstat-parameter \"%s\"\n"
 
-#: diff.c:210
+#: diff.c:219
 #, c-format
 msgid ""
 "Found errors in 'diff.dirstat' config variable:\n"
@@ -317,7 +325,7 @@ msgstr ""
 "Hittade fel i konfigurationsvariabeln \"diff.dirstat\":\n"
 "%s"
 
-#: diff.c:3458
+#: diff.c:3467
 #, c-format
 msgid ""
 "Failed to parse --dirstat/-X option parameter:\n"
@@ -338,17 +346,17 @@ msgstr "gpg godtog inte data"
 msgid "gpg failed to sign the data"
 msgstr "gpg misslyckades signera data"
 
-#: grep.c:1441
+#: grep.c:1622
 #, c-format
 msgid "'%s': unable to read %s"
 msgstr "\"%s\" kunde inte läsa %s"
 
-#: grep.c:1458
+#: grep.c:1639
 #, c-format
 msgid "'%s': %s"
 msgstr "\"%s\": %s"
 
-#: grep.c:1469
+#: grep.c:1650
 #, c-format
 msgid "'%s': short read %s"
 msgstr "\"%s\": kort läsning %s"
@@ -408,6 +416,15 @@ msgstr[1] ""
 "\n"
 "Menade du ett av dessa?"
 
+#: merge.c:56
+msgid "failed to read the cache"
+msgstr "misslyckads läsa cachen"
+
+#: merge.c:110 builtin/checkout.c:333 builtin/checkout.c:534
+#: builtin/clone.c:586
+msgid "unable to write new index file"
+msgstr "kunde inte skriva ny indexfil"
+
 #: merge-recursive.c:190
 #, c-format
 msgid "(bad commit)\n"
@@ -587,7 +604,7 @@ msgstr "Hoppade över %s (sammanslagen samma som befintlig)"
 msgid "Auto-merging %s"
 msgstr "Slår ihop %s automatiskt"
 
-#: merge-recursive.c:1633 git-submodule.sh:869
+#: merge-recursive.c:1633 git-submodule.sh:893
 msgid "submodule"
 msgstr "undermodul"
 
@@ -658,7 +675,7 @@ msgstr "sammanslagningen returnerade ingen incheckning"
 msgid "Could not parse object '%s'"
 msgstr "Kunde inte tolka objektet \"%s\""
 
-#: merge-recursive.c:2009 builtin/merge.c:696
+#: merge-recursive.c:2009 builtin/merge.c:643
 msgid "Unable to write index."
 msgstr "Kunde inte skriva indexet."
 
@@ -715,14 +732,14 @@ msgstr[1] ""
 "Din gren och \"%s\" har divergerat,\n"
 "och har %d respektive %d olika incheckningar.\n"
 
-#: sequencer.c:123 builtin/merge.c:864 builtin/merge.c:977
-#: builtin/merge.c:1087 builtin/merge.c:1097
+#: sequencer.c:123 builtin/merge.c:761 builtin/merge.c:874 builtin/merge.c:984
+#: builtin/merge.c:994
 #, c-format
 msgid "Could not open '%s' for writing"
 msgstr "Kunde inte öppna \"%s\" för skrivning"
 
-#: sequencer.c:125 builtin/merge.c:333 builtin/merge.c:867
-#: builtin/merge.c:1089 builtin/merge.c:1102
+#: sequencer.c:125 builtin/merge.c:333 builtin/merge.c:764 builtin/merge.c:986
+#: builtin/merge.c:999
 #, c-format
 msgid "Could not write to '%s'"
 msgstr "Kunde inte skriva till \"%s\""
@@ -1348,7 +1365,7 @@ msgstr "git add [flaggor] [--] <filmönster>..."
 msgid "unexpected diff status %c"
 msgstr "diff-status %c förväntades inte"
 
-#: builtin/add.c:67 builtin/commit.c:230
+#: builtin/add.c:67 builtin/commit.c:231
 msgid "updating files failed"
 msgstr "misslyckades uppdatera filer"
 
@@ -1366,7 +1383,7 @@ msgstr "Sökvägen \"%s\" är i undermodulen \"%.*s\""
 msgid "Unstaged changes after refreshing the index:"
 msgstr "Ospårade ändringar efter att ha uppdaterat indexet:"
 
-#: builtin/add.c:195 builtin/add.c:460 builtin/rm.c:186
+#: builtin/add.c:195 builtin/add.c:460 builtin/rm.c:260
 #, c-format
 msgid "pathspec '%s' did not match any files"
 msgstr "sökvägsangivelsen \"%s\" motsvarade inte några filer"
@@ -1409,12 +1426,12 @@ msgstr "Följande sökvägar ignoreras av en av dina .gitignore-filer:\n"
 
 #: builtin/add.c:319 builtin/clean.c:52 builtin/fetch.c:78 builtin/mv.c:63
 #: builtin/prune-packed.c:76 builtin/push.c:388 builtin/remote.c:1253
-#: builtin/rm.c:133
+#: builtin/rm.c:206
 msgid "dry run"
 msgstr "testkörning"
 
-#: builtin/add.c:320 builtin/apply.c:4354 builtin/commit.c:1154
-#: builtin/count-objects.c:82 builtin/fsck.c:613 builtin/log.c:1477
+#: builtin/add.c:320 builtin/apply.c:4354 builtin/commit.c:1160
+#: builtin/count-objects.c:82 builtin/fsck.c:613 builtin/log.c:1483
 #: builtin/mv.c:62 builtin/read-tree.c:112
 msgid "be verbose"
 msgstr "var pratsam"
@@ -1423,7 +1440,7 @@ msgstr "var pratsam"
 msgid "interactive picking"
 msgstr "plocka interaktivt"
 
-#: builtin/add.c:323 builtin/checkout.c:1028 builtin/reset.c:248
+#: builtin/add.c:323 builtin/checkout.c:1031 builtin/reset.c:248
 msgid "select hunks interactively"
 msgstr "välj stycken interaktivt"
 
@@ -1490,12 +1507,12 @@ msgstr "Inget angivet, inget tillagt.\n"
 msgid "Maybe you wanted to say 'git add .'?\n"
 msgstr "Kanske menade du att skriva \"git add .\"?\n"
 
-#: builtin/add.c:421 builtin/clean.c:95 builtin/commit.c:290 builtin/mv.c:82
-#: builtin/rm.c:162
+#: builtin/add.c:421 builtin/clean.c:95 builtin/commit.c:291 builtin/mv.c:82
+#: builtin/rm.c:235
 msgid "index file corrupt"
 msgstr "indexfilen trasig"
 
-#: builtin/add.c:481 builtin/apply.c:4450 builtin/mv.c:229 builtin/rm.c:260
+#: builtin/add.c:481 builtin/apply.c:4450 builtin/mv.c:229 builtin/rm.c:355
 msgid "Unable to write new index file"
 msgstr "Kunde inte skriva ny indexfil"
 
@@ -2031,95 +2048,95 @@ msgstr "git blame [flaggor] [rev-flaggor] [rev] [--] fil"
 msgid "[rev-opts] are documented in git-rev-list(1)"
 msgstr "[rev-flaggor] dokumenteras i git-rev-list(1)"
 
-#: builtin/blame.c:2373
+#: builtin/blame.c:2374
 msgid "Show blame entries as we find them, incrementally"
 msgstr "Visa klandringsposter när vi hittar dem, interaktivt"
 
-#: builtin/blame.c:2374
+#: builtin/blame.c:2375
 msgid "Show blank SHA-1 for boundary commits (Default: off)"
 msgstr "Visa blank SHA-1 för gränsincheckningar (Standard: av)"
 
-#: builtin/blame.c:2375
+#: builtin/blame.c:2376
 msgid "Do not treat root commits as boundaries (Default: off)"
 msgstr "Behandla inte rotincheckningar som gränser (Standard: av)"
 
-#: builtin/blame.c:2376
+#: builtin/blame.c:2377
 msgid "Show work cost statistics"
 msgstr "Visa statistik över arbetskostnad"
 
-#: builtin/blame.c:2377
+#: builtin/blame.c:2378
 msgid "Show output score for blame entries"
 msgstr "Visa utdatapoäng för klandringsposter"
 
-#: builtin/blame.c:2378
+#: builtin/blame.c:2379
 msgid "Show original filename (Default: auto)"
 msgstr "Visa originalfilnamn (Standard: auto)"
 
-#: builtin/blame.c:2379
+#: builtin/blame.c:2380
 msgid "Show original linenumber (Default: off)"
 msgstr "Visa ursprungligt radnummer (Standard: av)"
 
-#: builtin/blame.c:2380
+#: builtin/blame.c:2381
 msgid "Show in a format designed for machine consumption"
 msgstr "Visa i ett format avsett för maskinkonsumtion"
 
-#: builtin/blame.c:2381
+#: builtin/blame.c:2382
 msgid "Show porcelain format with per-line commit information"
 msgstr "Visa porslinsformat med per-rad-incheckningsinformation"
 
-#: builtin/blame.c:2382
+#: builtin/blame.c:2383
 msgid "Use the same output mode as git-annotate (Default: off)"
 msgstr "Använd samma utdataläge som git-annotate (Standard: av)"
 
-#: builtin/blame.c:2383
+#: builtin/blame.c:2384
 msgid "Show raw timestamp (Default: off)"
 msgstr "Visa rå tidsstämpel (Standard: av)"
 
-#: builtin/blame.c:2384
+#: builtin/blame.c:2385
 msgid "Show long commit SHA1 (Default: off)"
 msgstr "Visa lång inchecknings-SHA1 (Standard: av)"
 
-#: builtin/blame.c:2385
+#: builtin/blame.c:2386
 msgid "Suppress author name and timestamp (Default: off)"
 msgstr "Undertryck författarnamn och tidsstämpel (Standard: av)"
 
-#: builtin/blame.c:2386
+#: builtin/blame.c:2387
 msgid "Show author email instead of name (Default: off)"
 msgstr "Visa författarens e-post istället för namn (Standard: av)"
 
-#: builtin/blame.c:2387
+#: builtin/blame.c:2388
 msgid "Ignore whitespace differences"
 msgstr "Ignorera ändringar i blanksteg"
 
-#: builtin/blame.c:2388
+#: builtin/blame.c:2389
 msgid "Spend extra cycles to find better match"
 msgstr "Slösa extra cykler med att hitta bättre träff"
 
-#: builtin/blame.c:2389
+#: builtin/blame.c:2390
 msgid "Use revisions from <file> instead of calling git-rev-list"
 msgstr "Använd revisioner från <fil> istället för att anropa git-rev-list"
 
-#: builtin/blame.c:2390
+#: builtin/blame.c:2391
 msgid "Use <file>'s contents as the final image"
 msgstr "Använd <fil>s innehåll som slutgiltig bild"
 
-#: builtin/blame.c:2391 builtin/blame.c:2392
+#: builtin/blame.c:2392 builtin/blame.c:2393
 msgid "score"
 msgstr "poäng"
 
-#: builtin/blame.c:2391
+#: builtin/blame.c:2392
 msgid "Find line copies within and across files"
 msgstr "Hitta kopierade rader inuti och mellan filer"
 
-#: builtin/blame.c:2392
+#: builtin/blame.c:2393
 msgid "Find line movements within and across files"
 msgstr "Hitta flyttade rader inuti och mellan filer"
 
-#: builtin/blame.c:2393
+#: builtin/blame.c:2394
 msgid "n,m"
 msgstr "n,m"
 
-#: builtin/blame.c:2393
+#: builtin/blame.c:2394
 msgid "Process only line range n,m, counting from 1"
 msgstr "Behandla endast radintervallet n,m, med början på 1"
 
@@ -2157,267 +2174,267 @@ msgstr ""
 "tar inte bort grenen \"%s\" som inte har slagits ihop med\n"
 "         \"%s\", trots att den har slagits ihop med HEAD."
 
-#: builtin/branch.c:181
+#: builtin/branch.c:163
+#, c-format
+msgid "Couldn't look up commit object for '%s'"
+msgstr "Kunde inte slå upp incheckningsobjekt för \"%s\""
+
+#: builtin/branch.c:167
+#, c-format
+msgid ""
+"The branch '%s' is not fully merged.\n"
+"If you are sure you want to delete it, run 'git branch -D %s'."
+msgstr ""
+"Grenen \"%s\" har inte slagits samman i sin helhet.\n"
+"Om du är säker på att du vill ta bort den, kör \"git branch -D %s\"."
+
+#: builtin/branch.c:180
+msgid "Update of config-file failed"
+msgstr "Misslyckades uppdatera konfigurationsfil"
+
+#: builtin/branch.c:208
 msgid "cannot use -a with -d"
 msgstr "kan inte ange -a med -d"
 
-#: builtin/branch.c:187
+#: builtin/branch.c:214
 msgid "Couldn't look up commit object for HEAD"
 msgstr "Kunde inte slå upp incheckningsobjekt för HEAD"
 
-#: builtin/branch.c:192
+#: builtin/branch.c:222
 #, c-format
 msgid "Cannot delete the branch '%s' which you are currently on."
 msgstr "Kan inte ta bort grenen \"%s\" som du befinner dig på för närvarande."
 
-#: builtin/branch.c:203
+#: builtin/branch.c:235
 #, c-format
 msgid "remote branch '%s' not found."
 msgstr "fjärrgrenen \"%s\" hittades inte."
 
-#: builtin/branch.c:204
+#: builtin/branch.c:236
 #, c-format
 msgid "branch '%s' not found."
 msgstr "grenen \"%s\" hittades inte."
 
-#: builtin/branch.c:211
-#, c-format
-msgid "Couldn't look up commit object for '%s'"
-msgstr "Kunde inte slå upp incheckningsobjekt för \"%s\""
-
-#: builtin/branch.c:217
-#, c-format
-msgid ""
-"The branch '%s' is not fully merged.\n"
-"If you are sure you want to delete it, run 'git branch -D %s'."
-msgstr ""
-"Grenen \"%s\" har inte slagits samman i sin helhet.\n"
-"Om du är säker på att du vill ta bort den, kör \"git branch -D %s\"."
-
-#: builtin/branch.c:226
+#: builtin/branch.c:250
 #, c-format
 msgid "Error deleting remote branch '%s'"
 msgstr "Fel vid borttagning av fjärrgrenen \"%s\""
 
-#: builtin/branch.c:227
+#: builtin/branch.c:251
 #, c-format
 msgid "Error deleting branch '%s'"
 msgstr "Fel vid borttagning av grenen \"%s\""
 
-#: builtin/branch.c:234
+#: builtin/branch.c:258
 #, c-format
 msgid "Deleted remote branch %s (was %s).\n"
 msgstr "Tog bort fjärrgrenen %s (var %s).\n"
 
-#: builtin/branch.c:235
+#: builtin/branch.c:259
 #, c-format
 msgid "Deleted branch %s (was %s).\n"
 msgstr "Tog bort grenen %s (var %s).\n"
 
-#: builtin/branch.c:240
-msgid "Update of config-file failed"
-msgstr "Misslyckades uppdatera konfigurationsfil"
-
-#: builtin/branch.c:338
+#: builtin/branch.c:361
 #, c-format
 msgid "branch '%s' does not point at a commit"
 msgstr "grenen \"%s\" pekar inte på en incheckning"
 
-#: builtin/branch.c:410
+#: builtin/branch.c:433
 #, c-format
 msgid "[%s: behind %d]"
 msgstr "[%s: bakom %d] "
 
-#: builtin/branch.c:412
+#: builtin/branch.c:435
 #, c-format
 msgid "[behind %d]"
 msgstr "[bakom %d] "
 
-#: builtin/branch.c:416
+#: builtin/branch.c:439
 #, c-format
 msgid "[%s: ahead %d]"
 msgstr "[%s: före %d] "
 
-#: builtin/branch.c:418
+#: builtin/branch.c:441
 #, c-format
 msgid "[ahead %d]"
 msgstr "[före %d] "
 
-#: builtin/branch.c:421
+#: builtin/branch.c:444
 #, c-format
 msgid "[%s: ahead %d, behind %d]"
 msgstr "[%s: före %d, bakom %d] "
 
-#: builtin/branch.c:424
+#: builtin/branch.c:447
 #, c-format
 msgid "[ahead %d, behind %d]"
 msgstr "[före %d, bakom %d] "
 
-#: builtin/branch.c:537
+#: builtin/branch.c:560
 msgid "(no branch)"
 msgstr "(ingen gren)"
 
-#: builtin/branch.c:602
+#: builtin/branch.c:625
 msgid "some refs could not be read"
 msgstr "vissa referenser kunde inte läsas"
 
-#: builtin/branch.c:615
+#: builtin/branch.c:638
 msgid "cannot rename the current branch while not on any."
 msgstr ""
 "kunde inte byta namn på aktuell gren när du inte befinner dig på någon."
 
-#: builtin/branch.c:625
+#: builtin/branch.c:648
 #, c-format
 msgid "Invalid branch name: '%s'"
 msgstr "Felaktigt namn på gren: \"%s\""
 
-#: builtin/branch.c:640
+#: builtin/branch.c:663
 msgid "Branch rename failed"
 msgstr "Misslyckades byta namn på gren"
 
-#: builtin/branch.c:644
+#: builtin/branch.c:667
 #, c-format
 msgid "Renamed a misnamed branch '%s' away"
 msgstr "Bytte bort namn på en felaktigt namngiven gren \"%s\""
 
-#: builtin/branch.c:648
+#: builtin/branch.c:671
 #, c-format
 msgid "Branch renamed to %s, but HEAD is not updated!"
 msgstr "Grenen namnbytt till %s, men HEAD har inte uppdaterats!"
 
-#: builtin/branch.c:655
+#: builtin/branch.c:678
 msgid "Branch is renamed, but update of config-file failed"
 msgstr "Grenen namnbytt, men misslyckades uppdatera konfigurationsfilen"
 
-#: builtin/branch.c:670
+#: builtin/branch.c:693
 #, c-format
 msgid "malformed object name %s"
 msgstr "felformat objektnamn %s"
 
-#: builtin/branch.c:694
+#: builtin/branch.c:717
 #, c-format
 msgid "could not write branch description template: %s"
 msgstr "kunde inte skriva grenbeskrivningsmall: %s"
 
-#: builtin/branch.c:724
+#: builtin/branch.c:747
 msgid "Generic options"
 msgstr "Allmänna flaggor"
 
-#: builtin/branch.c:726
+#: builtin/branch.c:749
 msgid "show hash and subject, give twice for upstream branch"
 msgstr "visa hash och ärenderad, ange två gånger för uppströmsgren"
 
-#: builtin/branch.c:727
+#: builtin/branch.c:750
 msgid "suppress informational messages"
 msgstr "undertryck informationsmeddelanden"
 
-#: builtin/branch.c:728
+#: builtin/branch.c:751
 msgid "set up tracking mode (see git-pull(1))"
 msgstr "ställ in spårningsläge (se git-pull(1))"
 
-#: builtin/branch.c:730
+#: builtin/branch.c:753
 msgid "change upstream info"
 msgstr "ändra uppströmsinformation"
 
-#: builtin/branch.c:734
+#: builtin/branch.c:757
 msgid "use colored output"
 msgstr "använd färgad utdata"
 
-#: builtin/branch.c:735
+#: builtin/branch.c:758
 msgid "act on remote-tracking branches"
 msgstr "arbeta på fjärrspårande grenar"
 
-#: builtin/branch.c:738 builtin/branch.c:744 builtin/branch.c:765
-#: builtin/branch.c:771 builtin/commit.c:1362 builtin/commit.c:1363
-#: builtin/commit.c:1364 builtin/commit.c:1365 builtin/tag.c:470
+#: builtin/branch.c:761 builtin/branch.c:767 builtin/branch.c:788
+#: builtin/branch.c:794 builtin/commit.c:1376 builtin/commit.c:1377
+#: builtin/commit.c:1378 builtin/commit.c:1379 builtin/tag.c:470
 msgid "commit"
 msgstr "incheckning"
 
-#: builtin/branch.c:739 builtin/branch.c:745
+#: builtin/branch.c:762 builtin/branch.c:768
 msgid "print only branches that contain the commit"
 msgstr "visa endast grenar som innehåller incheckningen"
 
-#: builtin/branch.c:751
+#: builtin/branch.c:774
 msgid "Specific git-branch actions:"
 msgstr "Specifika git-branch-åtgärder:"
 
-#: builtin/branch.c:752
+#: builtin/branch.c:775
 msgid "list both remote-tracking and local branches"
 msgstr "visa både fjärrspårande och lokala grenar"
 
-#: builtin/branch.c:754
+#: builtin/branch.c:777
 msgid "delete fully merged branch"
 msgstr "ta bort helt sammanslagen gren"
 
-#: builtin/branch.c:755
+#: builtin/branch.c:778
 msgid "delete branch (even if not merged)"
 msgstr "ta bort gren (även om inte helt sammanslagen)"
 
-#: builtin/branch.c:756
+#: builtin/branch.c:779
 msgid "move/rename a branch and its reflog"
 msgstr "flytta/ta bort en gren och dess reflogg"
 
-#: builtin/branch.c:757
+#: builtin/branch.c:780
 msgid "move/rename a branch, even if target exists"
 msgstr "flytta/ta bort en gren, även om målet finns"
 
-#: builtin/branch.c:758
+#: builtin/branch.c:781
 msgid "list branch names"
 msgstr "lista namn på grenar"
 
-#: builtin/branch.c:759
+#: builtin/branch.c:782
 msgid "create the branch's reflog"
 msgstr "skapa grenens reflogg"
 
-#: builtin/branch.c:761
+#: builtin/branch.c:784
 msgid "edit the description for the branch"
 msgstr "redigera beskrivning för grenen"
 
-#: builtin/branch.c:762
+#: builtin/branch.c:785
 msgid "force creation (when already exists)"
 msgstr "tvinga skapande (när den redan finns)"
 
-#: builtin/branch.c:765
+#: builtin/branch.c:788
 msgid "print only not merged branches"
 msgstr "visa endast ej sammanslagna grenar"
 
-#: builtin/branch.c:771
+#: builtin/branch.c:794
 msgid "print only merged branches"
 msgstr "visa endast sammanslagna grenar"
 
-#: builtin/branch.c:775
+#: builtin/branch.c:798
 msgid "list branches in columns"
 msgstr "visa grenar i spalter"
 
-#: builtin/branch.c:788
+#: builtin/branch.c:811
 msgid "Failed to resolve HEAD as a valid ref."
 msgstr "Misslyckades slå upp HEAD som giltig referens"
 
-#: builtin/branch.c:793 builtin/clone.c:561
+#: builtin/branch.c:816 builtin/clone.c:561
 msgid "HEAD not found below refs/heads!"
 msgstr "HEAD hittades inte under refs/heads!"
 
-#: builtin/branch.c:813
+#: builtin/branch.c:836
 msgid "--column and --verbose are incompatible"
 msgstr "--column och --verbose är inkompatibla"
 
-#: builtin/branch.c:864
+#: builtin/branch.c:887
 #, c-format
 msgid "branch '%s' does not exist"
 msgstr "grenen \"%s\" finns inte"
 
-#: builtin/branch.c:876
+#: builtin/branch.c:899
 #, c-format
 msgid "Branch '%s' has no upstream information"
 msgstr "Grenen \"%s\" har ingen uppströmsinformation"
 
-#: builtin/branch.c:891
+#: builtin/branch.c:914
 msgid "-a and -r options to 'git branch' do not make sense with a branch name"
 msgstr ""
 "flaggorna -a och -r på \"git branch\" kan inte anges tillsammans med ett "
 "grennamn"
 
-#: builtin/branch.c:894
+#: builtin/branch.c:917
 #, c-format
 msgid ""
 "The --set-upstream flag is deprecated and will be removed. Consider using --"
@@ -2426,7 +2443,7 @@ msgstr ""
 "Flaggan --set-upstream rekommenderas ej och kommer tas bort. Använd --track "
 "eller --set-upstream-to\n"
 
-#: builtin/branch.c:911
+#: builtin/branch.c:934
 #, c-format
 msgid ""
 "\n"
@@ -2437,12 +2454,12 @@ msgstr ""
 "Om du vill göra så att \"%s\" spårar \"%s\" gör du så här:\n"
 "\n"
 
-#: builtin/branch.c:912
+#: builtin/branch.c:935
 #, c-format
 msgid "    git branch -d %s\n"
 msgstr "    git branch -d %s\n"
 
-#: builtin/branch.c:913
+#: builtin/branch.c:936
 #, c-format
 msgid "    git branch --set-upstream-to %s\n"
 msgstr "    git branch --set-upstream-to %s\n"
@@ -2631,11 +2648,6 @@ msgstr "indexfilen är trasig"
 msgid "path '%s' is unmerged"
 msgstr "sökvägen \"%s\" har inte slagits ihop"
 
-#: builtin/checkout.c:333 builtin/checkout.c:534 builtin/clone.c:586
-#: builtin/merge.c:811
-msgid "unable to write new index file"
-msgstr "kunde inte skriva ny indexfil"
-
 #: builtin/checkout.c:448
 msgid "you need to resolve your current index first"
 msgstr "du måste lösa ditt befintliga index först"
@@ -2664,7 +2676,7 @@ msgstr "Redan på \"%s\"\n"
 msgid "Switched to and reset branch '%s'\n"
 msgstr "Växlade till och nollställde grenen \"%s\"\n"
 
-#: builtin/checkout.c:618
+#: builtin/checkout.c:618 builtin/checkout.c:955
 #, c-format
 msgid "Switched to a new branch '%s'\n"
 msgstr "Växlade till en ny gren \"%s\"\n"
@@ -2742,112 +2754,112 @@ msgstr "felaktig referens: %s"
 msgid "reference is not a tree: %s"
 msgstr "referensen är inte ett träd: %s"
 
-#: builtin/checkout.c:961
+#: builtin/checkout.c:964
 msgid "paths cannot be used with switching branches"
 msgstr "sökvägar kan inte användas vid byte av gren"
 
-#: builtin/checkout.c:964 builtin/checkout.c:968
+#: builtin/checkout.c:967 builtin/checkout.c:971
 #, c-format
 msgid "'%s' cannot be used with switching branches"
 msgstr "\"%s\" kan inte användas vid byte av gren"
 
-#: builtin/checkout.c:972 builtin/checkout.c:975 builtin/checkout.c:980
-#: builtin/checkout.c:983
+#: builtin/checkout.c:975 builtin/checkout.c:978 builtin/checkout.c:983
+#: builtin/checkout.c:986
 #, c-format
 msgid "'%s' cannot be used with '%s'"
 msgstr "\"%s\" kan inte användas med \"%s\""
 
-#: builtin/checkout.c:988
+#: builtin/checkout.c:991
 #, c-format
 msgid "Cannot switch branch to a non-commit '%s'"
 msgstr "Kan inte växla gren till icke-incheckningen \"%s\""
 
-#: builtin/checkout.c:1009 builtin/gc.c:177
+#: builtin/checkout.c:1012 builtin/gc.c:177
 msgid "suppress progress reporting"
 msgstr "undertryck förloppsrapportering"
 
-#: builtin/checkout.c:1010 builtin/checkout.c:1012 builtin/clone.c:89
+#: builtin/checkout.c:1013 builtin/checkout.c:1015 builtin/clone.c:89
 #: builtin/remote.c:169 builtin/remote.c:171
 msgid "branch"
 msgstr "gren"
 
-#: builtin/checkout.c:1011
+#: builtin/checkout.c:1014
 msgid "create and checkout a new branch"
 msgstr "skapa och checka ut en ny gren"
 
-#: builtin/checkout.c:1013
+#: builtin/checkout.c:1016
 msgid "create/reset and checkout a branch"
 msgstr "skapa/nollställ och checka ut en gren"
 
-#: builtin/checkout.c:1014
+#: builtin/checkout.c:1017
 msgid "create reflog for new branch"
 msgstr "skapa reflogg för ny gren"
 
-#: builtin/checkout.c:1015
+#: builtin/checkout.c:1018
 msgid "detach the HEAD at named commit"
 msgstr "koppla från HEAD vid namngiven incheckning"
 
-#: builtin/checkout.c:1016
+#: builtin/checkout.c:1019
 msgid "set upstream info for new branch"
 msgstr "sätt uppströmsinformation för ny gren"
 
-#: builtin/checkout.c:1018
+#: builtin/checkout.c:1021
 msgid "new branch"
 msgstr "ny gren"
 
-#: builtin/checkout.c:1018
+#: builtin/checkout.c:1021
 msgid "new unparented branch"
 msgstr "ny gren utan förälder"
 
-#: builtin/checkout.c:1019
+#: builtin/checkout.c:1022
 msgid "checkout our version for unmerged files"
 msgstr "checka ut vår version för ej sammanslagna filer"
 
-#: builtin/checkout.c:1021
+#: builtin/checkout.c:1024
 msgid "checkout their version for unmerged files"
 msgstr "checka ut deras version för ej sammanslagna filer"
 
-#: builtin/checkout.c:1023
+#: builtin/checkout.c:1026
 msgid "force checkout (throw away local modifications)"
 msgstr "tvinga utcheckning (kasta bort lokala ändringar)"
 
-#: builtin/checkout.c:1024
+#: builtin/checkout.c:1027
 msgid "perform a 3-way merge with the new branch"
 msgstr "utför en 3-vägssammanslagning för den nya grenen"
 
-#: builtin/checkout.c:1025 builtin/merge.c:215
+#: builtin/checkout.c:1028 builtin/merge.c:215
 msgid "update ignored files (default)"
 msgstr "uppdatera ignorerade filer (standard)"
 
-#: builtin/checkout.c:1026 builtin/log.c:1111 parse-options.h:241
+#: builtin/checkout.c:1029 builtin/log.c:1116 parse-options.h:241
 msgid "style"
 msgstr "stil"
 
-#: builtin/checkout.c:1027
+#: builtin/checkout.c:1030
 msgid "conflict style (merge or diff3)"
 msgstr "konfliktstil (merge eller diff3)"
 
-#: builtin/checkout.c:1030
+#: builtin/checkout.c:1033
 msgid "second guess 'git checkout no-such-branch'"
 msgstr "förutspå \"git checkout gren-saknas\""
 
-#: builtin/checkout.c:1054
+#: builtin/checkout.c:1057
 msgid "-b, -B and --orphan are mutually exclusive"
 msgstr "-b, -B och --orphan är ömsesidigt uteslutande"
 
-#: builtin/checkout.c:1071
+#: builtin/checkout.c:1074
 msgid "--track needs a branch name"
 msgstr "--track behöver ett namn på en gren"
 
-#: builtin/checkout.c:1078
+#: builtin/checkout.c:1081
 msgid "Missing branch name; try -b"
 msgstr "Grennamn saknas; försök med -b"
 
-#: builtin/checkout.c:1113
+#: builtin/checkout.c:1116
 msgid "invalid path specification"
 msgstr "felaktig sökvägsangivelse"
 
-#: builtin/checkout.c:1120
+#: builtin/checkout.c:1123
 #, c-format
 msgid ""
 "Cannot update paths and switch to branch '%s' at the same time.\n"
@@ -2856,12 +2868,12 @@ msgstr ""
 "Kan inte uppdatera sökvägar och växla till grenen \"%s\" samtidigt.\n"
 "Ville du checka ut \"%s\" som inte kan lösas som en utcheckning?"
 
-#: builtin/checkout.c:1125
+#: builtin/checkout.c:1128
 #, c-format
 msgid "git checkout: --detach does not take a path argument '%s'"
 msgstr "git checkout: --detach tar inte en sökväg som argument \"%s\""
 
-#: builtin/checkout.c:1129
+#: builtin/checkout.c:1132
 msgid ""
 "git checkout: --ours/--theirs, --force and --merge are incompatible when\n"
 "checking out of the index."
@@ -2886,8 +2898,8 @@ msgstr "tvinga"
 msgid "remove whole directories"
 msgstr "ta bort hela kataloger"
 
-#: builtin/clean.c:56 builtin/describe.c:413 builtin/grep.c:803
-#: builtin/ls-files.c:491 builtin/name-rev.c:231 builtin/show-ref.c:199
+#: builtin/clean.c:56 builtin/describe.c:413 builtin/grep.c:717
+#: builtin/ls-files.c:491 builtin/name-rev.c:231 builtin/show-ref.c:182
 msgid "pattern"
 msgstr "mönster"
 
@@ -3012,7 +3024,7 @@ msgstr "checka ut <gren> istället för fjärrens HEAD"
 msgid "path to git-upload-pack on the remote"
 msgstr "sökväg till git-upload-pack på fjärren"
 
-#: builtin/clone.c:93 builtin/fetch.c:83 builtin/grep.c:748
+#: builtin/clone.c:93 builtin/fetch.c:83 builtin/grep.c:662
 msgid "depth"
 msgstr "djup"
 
@@ -3247,93 +3259,93 @@ msgstr ""
 "\n"
 "Annars använder du \"git reset\"\n"
 
-#: builtin/commit.c:257
+#: builtin/commit.c:258
 msgid "failed to unpack HEAD tree object"
 msgstr "misslyckades packa upp HEAD:s trädobjekt"
 
-#: builtin/commit.c:299
+#: builtin/commit.c:300
 msgid "unable to create temporary index"
 msgstr "kunde inte skapa temporär indexfil"
 
-#: builtin/commit.c:305
+#: builtin/commit.c:306
 msgid "interactive add failed"
 msgstr "interaktiv tilläggning misslyckades"
 
-#: builtin/commit.c:338 builtin/commit.c:359 builtin/commit.c:409
+#: builtin/commit.c:339 builtin/commit.c:360 builtin/commit.c:410
 msgid "unable to write new_index file"
 msgstr "kunde inte skriva filen new_index"
 
-#: builtin/commit.c:390
+#: builtin/commit.c:391
 msgid "cannot do a partial commit during a merge."
 msgstr "kan inte utföra en delvis incheckning under en sammanslagning."
 
-#: builtin/commit.c:392
+#: builtin/commit.c:393
 msgid "cannot do a partial commit during a cherry-pick."
 msgstr "kan inte utföra en delvis incheckning under en cherry-pick."
 
-#: builtin/commit.c:402
+#: builtin/commit.c:403
 msgid "cannot read the index"
 msgstr "kan inte läsa indexet"
 
-#: builtin/commit.c:422
+#: builtin/commit.c:423
 msgid "unable to write temporary index file"
 msgstr "kunde inte skriva temporär indexfil"
 
-#: builtin/commit.c:509 builtin/commit.c:515
+#: builtin/commit.c:511 builtin/commit.c:517
 #, c-format
 msgid "invalid commit: %s"
 msgstr "felaktig incheckning: %s"
 
-#: builtin/commit.c:538
+#: builtin/commit.c:540
 msgid "malformed --author parameter"
 msgstr "felformad \"--author\"-flagga"
 
-#: builtin/commit.c:558
+#: builtin/commit.c:560
 #, c-format
 msgid "Malformed ident string: '%s'"
 msgstr "Felaktig indragningssträng: \"%s\""
 
-#: builtin/commit.c:596 builtin/commit.c:629 builtin/commit.c:952
+#: builtin/commit.c:598 builtin/commit.c:631 builtin/commit.c:954
 #, c-format
 msgid "could not lookup commit %s"
 msgstr "kunde inte slå upp incheckningen %s"
 
-#: builtin/commit.c:608 builtin/shortlog.c:296
+#: builtin/commit.c:610 builtin/shortlog.c:296
 #, c-format
 msgid "(reading log message from standard input)\n"
 msgstr "(läser loggmeddelande från standard in)\n"
 
-#: builtin/commit.c:610
+#: builtin/commit.c:612
 msgid "could not read log from standard input"
 msgstr "kunde inte läsa logg från standard in"
 
-#: builtin/commit.c:614
+#: builtin/commit.c:616
 #, c-format
 msgid "could not read log file '%s'"
 msgstr "kunde inte läsa loggfilen \"%s\""
 
-#: builtin/commit.c:620
+#: builtin/commit.c:622
 msgid "commit has empty message"
 msgstr "incheckningen har ett tomt meddelande"
 
-#: builtin/commit.c:636
+#: builtin/commit.c:638
 msgid "could not read MERGE_MSG"
 msgstr "kunde inte läsa MERGE_MSG"
 
-#: builtin/commit.c:640
+#: builtin/commit.c:642
 msgid "could not read SQUASH_MSG"
 msgstr "kunde inte läsa SQUASH_MSG"
 
-#: builtin/commit.c:644
+#: builtin/commit.c:646
 #, c-format
 msgid "could not read '%s'"
 msgstr "kunde inte läsa \"%s\""
 
-#: builtin/commit.c:705
+#: builtin/commit.c:707
 msgid "could not write commit template"
 msgstr "kunde inte skriva incheckningsmall"
 
-#: builtin/commit.c:716
+#: builtin/commit.c:718
 #, c-format
 msgid ""
 "\n"
@@ -3348,7 +3360,7 @@ msgstr ""
 "\t%s\n"
 "och försöker igen.\n"
 
-#: builtin/commit.c:721
+#: builtin/commit.c:723
 #, c-format
 msgid ""
 "\n"
@@ -3363,7 +3375,7 @@ msgstr ""
 "\t%s\n"
 "och försöker igen.\n"
 
-#: builtin/commit.c:733
+#: builtin/commit.c:735
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
 "with '#' will be ignored, and an empty message aborts the commit.\n"
@@ -3371,7 +3383,7 @@ msgstr ""
 "Ange incheckningsmeddelandet för dina ändringar. Rader som inleds\n"
 "med \"#\" kommer ignoreras, och ett tomt meddelande avbryter incheckningen.\n"
 
-#: builtin/commit.c:738
+#: builtin/commit.c:740
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
 "with '#' will be kept; you may remove them yourself if you want to.\n"
@@ -3381,131 +3393,139 @@ msgstr ""
 "med \"#\" kommer behållas; du kan själv ta bort dem om du vill.\n"
 "Ett tomt meddelande avbryter incheckningen.\n"
 
-#: builtin/commit.c:751
+#: builtin/commit.c:753
 #, c-format
 msgid "%sAuthor:    %s"
 msgstr "%sFörfattare: %s"
 
-#: builtin/commit.c:758
+#: builtin/commit.c:760
 #, c-format
 msgid "%sCommitter: %s"
 msgstr "%sIncheckare: %s"
 
-#: builtin/commit.c:778
+#: builtin/commit.c:780
 msgid "Cannot read index"
 msgstr "Kan inte läsa indexet"
 
-#: builtin/commit.c:815
+#: builtin/commit.c:817
 msgid "Error building trees"
 msgstr "Fel vid byggande av träd"
 
-#: builtin/commit.c:830 builtin/tag.c:361
+#: builtin/commit.c:832 builtin/tag.c:361
 #, c-format
 msgid "Please supply the message using either -m or -F option.\n"
 msgstr "Ange meddelandet en av flaggorna -m eller -F.\n"
 
-#: builtin/commit.c:927
+#: builtin/commit.c:929
 #, c-format
 msgid "No existing author found with '%s'"
 msgstr "Hittade ingen befintlig författare med \"%s\""
 
-#: builtin/commit.c:942 builtin/commit.c:1142
+#: builtin/commit.c:944 builtin/commit.c:1148
 #, c-format
 msgid "Invalid untracked files mode '%s'"
 msgstr "Ogiltigt läge för ospårade filer: \"%s\""
 
-#: builtin/commit.c:982
+#: builtin/commit.c:984
 msgid "Using both --reset-author and --author does not make sense"
 msgstr "Kan inte använda både --reset-author och --author"
 
-#: builtin/commit.c:993
+#: builtin/commit.c:995
 msgid "You have nothing to amend."
 msgstr "Du har inget att utöka."
 
-#: builtin/commit.c:996
+#: builtin/commit.c:998
 msgid "You are in the middle of a merge -- cannot amend."
 msgstr "Du är i mitten av en sammanslagning -- kan inte utöka."
 
-#: builtin/commit.c:998
+#: builtin/commit.c:1000
 msgid "You are in the middle of a cherry-pick -- cannot amend."
 msgstr "Du är i mitten av en cherry-pick -- kan inte utöka."
 
-#: builtin/commit.c:1001
+#: builtin/commit.c:1003
 msgid "Options --squash and --fixup cannot be used together"
 msgstr "Flaggorna --squash och --fixup kan inte användas samtidigt"
 
-#: builtin/commit.c:1011
+#: builtin/commit.c:1013
 msgid "Only one of -c/-C/-F/--fixup can be used."
 msgstr "Endast en av -c/-C/-F/--fixup kan användas."
 
-#: builtin/commit.c:1013
+#: builtin/commit.c:1015
 msgid "Option -m cannot be combined with -c/-C/-F/--fixup."
 msgstr "Flaggan -m kan inte kombineras med -c/-C/-F/--fixup."
 
-#: builtin/commit.c:1021
+#: builtin/commit.c:1023
 msgid "--reset-author can be used only with -C, -c or --amend."
 msgstr "--reset-author kan endast användas med -C, -c eller --amend."
 
-#: builtin/commit.c:1038
+#: builtin/commit.c:1040
 msgid "Only one of --include/--only/--all/--interactive/--patch can be used."
 msgstr ""
 "Endast en av --include/--only/--all/--interactive/--patch kan användas."
 
-#: builtin/commit.c:1040
+#: builtin/commit.c:1042
 msgid "No paths with --include/--only does not make sense."
 msgstr "Du måste ange sökvägar tillsammans med --include/--only."
 
-#: builtin/commit.c:1042
+#: builtin/commit.c:1044
 msgid "Clever... amending the last one with dirty index."
 msgstr "Smart... utöka den senaste med smutsigt index."
 
-#: builtin/commit.c:1044
+#: builtin/commit.c:1046
 msgid "Explicit paths specified without -i nor -o; assuming --only paths..."
 msgstr "Explicita sökvägar angavs utan -i eller -o; antar --only sökvägar..."
 
-#: builtin/commit.c:1054 builtin/tag.c:577
+#: builtin/commit.c:1056 builtin/tag.c:577
 #, c-format
 msgid "Invalid cleanup mode %s"
 msgstr "Felaktigt städningsläge %s"
 
-#: builtin/commit.c:1059
+#: builtin/commit.c:1061
 msgid "Paths with -a does not make sense."
 msgstr "Kan inte ange sökvägar med -a."
 
-#: builtin/commit.c:1156 builtin/commit.c:1384
+#: builtin/commit.c:1067 builtin/commit.c:1202
+msgid "--long and -z are incompatible"
+msgstr "--long och -z är inkompatibla"
+
+#: builtin/commit.c:1162 builtin/commit.c:1398
 msgid "show status concisely"
 msgstr "vis koncis status"
 
-#: builtin/commit.c:1158 builtin/commit.c:1386
+#: builtin/commit.c:1164 builtin/commit.c:1400
 msgid "show branch information"
 msgstr "visa information om gren"
 
-#: builtin/commit.c:1160 builtin/commit.c:1388 builtin/push.c:389
+#: builtin/commit.c:1166 builtin/commit.c:1402 builtin/push.c:389
 msgid "machine-readable output"
 msgstr "maskinläsbar utdata"
 
-#: builtin/commit.c:1163 builtin/commit.c:1390
+#: builtin/commit.c:1169 builtin/commit.c:1404
+msgid "show status in long format (default)"
+msgstr "visa status i långt format (standard)"
+
+#: builtin/commit.c:1172 builtin/commit.c:1407
 msgid "terminate entries with NUL"
 msgstr "terminera poster med NUL"
 
-#: builtin/commit.c:1165 builtin/commit.c:1393 builtin/fast-export.c:636
+#: builtin/commit.c:1174 builtin/commit.c:1410 builtin/fast-export.c:636
 #: builtin/fast-export.c:639 builtin/tag.c:461
 msgid "mode"
 msgstr "läge"
 
-#: builtin/commit.c:1166 builtin/commit.c:1393
+#: builtin/commit.c:1175 builtin/commit.c:1410
 msgid "show untracked files, optional modes: all, normal, no. (Default: all)"
 msgstr "visa ospårade filer, valfria lägen: alla, normal, no. (Standard: all)"
 
-#: builtin/commit.c:1169
+#: builtin/commit.c:1178
 msgid "show ignored files"
 msgstr "visa ignorerade filer"
 
-#: builtin/commit.c:1170 parse-options.h:151
+#: builtin/commit.c:1179 parse-options.h:151
 msgid "when"
 msgstr "när"
 
-#: builtin/commit.c:1171
+#: builtin/commit.c:1180
 msgid ""
 "ignore changes to submodules, optional when: all, dirty, untracked. "
 "(Default: all)"
@@ -3513,217 +3533,217 @@ msgstr ""
 "ignorera ändringar i undermoduler, valfritt när: all, dirty, untracked. "
 "(Default: all)"
 
-#: builtin/commit.c:1173
+#: builtin/commit.c:1182
 msgid "list untracked files in columns"
 msgstr "visa ospårade filer i spalter"
 
-#: builtin/commit.c:1242
+#: builtin/commit.c:1256
 msgid "couldn't look up newly created commit"
 msgstr "kunde inte slå upp en precis skapad incheckning"
 
-#: builtin/commit.c:1244
+#: builtin/commit.c:1258
 msgid "could not parse newly created commit"
 msgstr "kunde inte tolka en precis skapad incheckning"
 
-#: builtin/commit.c:1285
+#: builtin/commit.c:1299
 msgid "detached HEAD"
 msgstr "frånkopplad HEAD"
 
-#: builtin/commit.c:1287
+#: builtin/commit.c:1301
 msgid " (root-commit)"
 msgstr " (rotincheckning)"
 
-#: builtin/commit.c:1354
+#: builtin/commit.c:1368
 msgid "suppress summary after successful commit"
 msgstr "undertryck sammanfattning efter framgångsrik incheckning"
 
-#: builtin/commit.c:1355
+#: builtin/commit.c:1369
 msgid "show diff in commit message template"
 msgstr "visa diff i mallen för incheckningsmeddelandet"
 
-#: builtin/commit.c:1357
+#: builtin/commit.c:1371
 msgid "Commit message options"
 msgstr "Alternativ för incheckningsmeddelande"
 
-#: builtin/commit.c:1358 builtin/tag.c:459
+#: builtin/commit.c:1372 builtin/tag.c:459
 msgid "read message from file"
 msgstr "läs meddelande från fil"
 
-#: builtin/commit.c:1359
+#: builtin/commit.c:1373
 msgid "author"
 msgstr "författare"
 
-#: builtin/commit.c:1359
+#: builtin/commit.c:1373
 msgid "override author for commit"
 msgstr "överstyr författare för incheckningen"
 
-#: builtin/commit.c:1360 builtin/gc.c:178
+#: builtin/commit.c:1374 builtin/gc.c:178
 msgid "date"
 msgstr "datum"
 
-#: builtin/commit.c:1360
+#: builtin/commit.c:1374
 msgid "override date for commit"
 msgstr "överstyr datum för inchecknignen"
 
-#: builtin/commit.c:1361 builtin/merge.c:206 builtin/notes.c:537
+#: builtin/commit.c:1375 builtin/merge.c:206 builtin/notes.c:537
 #: builtin/notes.c:694 builtin/tag.c:457
 msgid "message"
 msgstr "meddelande"
 
-#: builtin/commit.c:1361
+#: builtin/commit.c:1375
 msgid "commit message"
 msgstr "incheckningsmeddelande"
 
-#: builtin/commit.c:1362
+#: builtin/commit.c:1376
 msgid "reuse and edit message from specified commit"
 msgstr "återanvänd och redigera meddelande från angiven incheckning"
 
-#: builtin/commit.c:1363
+#: builtin/commit.c:1377
 msgid "reuse message from specified commit"
 msgstr "återanvänd meddelande från angiven incheckning"
 
-#: builtin/commit.c:1364
+#: builtin/commit.c:1378
 msgid "use autosquash formatted message to fixup specified commit"
 msgstr ""
 "använd autosquash-formaterat meddelande för att fixa angiven incheckning"
 
-#: builtin/commit.c:1365
+#: builtin/commit.c:1379
 msgid "use autosquash formatted message to squash specified commit"
 msgstr ""
 "använd autosquash-formaterat meddelande för att slå ihop med angiven "
 "incheckning"
 
-#: builtin/commit.c:1366
+#: builtin/commit.c:1380
 msgid "the commit is authored by me now (used with -C/-c/--amend)"
 msgstr "jag är nu författare av incheckningen (används med -C/-c/--amend)"
 
-#: builtin/commit.c:1367 builtin/log.c:1068 builtin/revert.c:109
+#: builtin/commit.c:1381 builtin/log.c:1073 builtin/revert.c:109
 msgid "add Signed-off-by:"
 msgstr "lägg till Signed-off-by:"
 
-#: builtin/commit.c:1368
+#: builtin/commit.c:1382
 msgid "use specified template file"
 msgstr "använd angiven mallfil"
 
-#: builtin/commit.c:1369
+#: builtin/commit.c:1383
 msgid "force edit of commit"
 msgstr "tvinga redigering av incheckning"
 
-#: builtin/commit.c:1370
+#: builtin/commit.c:1384
 msgid "default"
 msgstr "standard"
 
-#: builtin/commit.c:1370 builtin/tag.c:462
+#: builtin/commit.c:1384 builtin/tag.c:462
 msgid "how to strip spaces and #comments from message"
 msgstr "hur blanksteg och #kommentarer skall tas bort från meddelande"
 
-#: builtin/commit.c:1371
+#: builtin/commit.c:1385
 msgid "include status in commit message template"
 msgstr "inkludera status i mallen för incheckningsmeddelandet"
 
-#: builtin/commit.c:1372 builtin/merge.c:213 builtin/tag.c:463
+#: builtin/commit.c:1386 builtin/merge.c:213 builtin/tag.c:463
 msgid "key id"
 msgstr "nyckel-id"
 
-#: builtin/commit.c:1373 builtin/merge.c:214
+#: builtin/commit.c:1387 builtin/merge.c:214
 msgid "GPG sign commit"
 msgstr "GPG-signera incheckning"
 
 #. end commit message options
-#: builtin/commit.c:1376
+#: builtin/commit.c:1390
 msgid "Commit contents options"
 msgstr "Alternativ för incheckningens innehåll"
 
-#: builtin/commit.c:1377
+#: builtin/commit.c:1391
 msgid "commit all changed files"
 msgstr "checka in alla ändrade filer"
 
-#: builtin/commit.c:1378
+#: builtin/commit.c:1392
 msgid "add specified files to index for commit"
 msgstr "lägg till angivna filer till indexet för incheckning"
 
-#: builtin/commit.c:1379
+#: builtin/commit.c:1393
 msgid "interactively add files"
 msgstr "lägg till filer interaktivt"
 
-#: builtin/commit.c:1380
+#: builtin/commit.c:1394
 msgid "interactively add changes"
 msgstr "lägg till ändringar interaktivt"
 
-#: builtin/commit.c:1381
+#: builtin/commit.c:1395
 msgid "commit only specified files"
 msgstr "checka endast in angivna filer"
 
-#: builtin/commit.c:1382
+#: builtin/commit.c:1396
 msgid "bypass pre-commit hook"
 msgstr "förbigå pre-commit-krok"
 
-#: builtin/commit.c:1383
+#: builtin/commit.c:1397
 msgid "show what would be committed"
 msgstr "visa vad som skulle checkas in"
 
-#: builtin/commit.c:1391
+#: builtin/commit.c:1408
 msgid "amend previous commit"
 msgstr "lägg till föregående incheckning"
 
-#: builtin/commit.c:1392
+#: builtin/commit.c:1409
 msgid "bypass post-rewrite hook"
 msgstr "förbigå post-rewrite-krok"
 
-#: builtin/commit.c:1397
+#: builtin/commit.c:1414
 msgid "ok to record an empty change"
 msgstr "ok att registrera en tom ändring"
 
-#: builtin/commit.c:1400
+#: builtin/commit.c:1417
 msgid "ok to record a change with an empty message"
 msgstr "ok att registrera en ändring med tomt meddelande"
 
-#: builtin/commit.c:1432
+#: builtin/commit.c:1449
 msgid "could not parse HEAD commit"
 msgstr "kunde inte tolka HEAD:s incheckning"
 
-#: builtin/commit.c:1470 builtin/merge.c:508
+#: builtin/commit.c:1487 builtin/merge.c:508
 #, c-format
 msgid "could not open '%s' for reading"
 msgstr "kunde inte öppna \"%s\" för läsning"
 
-#: builtin/commit.c:1477
+#: builtin/commit.c:1494
 #, c-format
 msgid "Corrupt MERGE_HEAD file (%s)"
 msgstr "Trasig MERGE_HEAD-fil (%s)"
 
-#: builtin/commit.c:1484
+#: builtin/commit.c:1501
 msgid "could not read MERGE_MODE"
 msgstr "kunde inte läsa MERGE_MODE"
 
-#: builtin/commit.c:1503
+#: builtin/commit.c:1520
 #, c-format
 msgid "could not read commit message: %s"
 msgstr "kunde inte läsa incheckningsmeddelande: %s"
 
-#: builtin/commit.c:1517
+#: builtin/commit.c:1534
 #, c-format
 msgid "Aborting commit; you did not edit the message.\n"
 msgstr "Avbryter incheckning; meddelandet inte redigerat.\n"
 
-#: builtin/commit.c:1522
+#: builtin/commit.c:1539
 #, c-format
 msgid "Aborting commit due to empty commit message.\n"
 msgstr "Avbryter på grund av tomt incheckningsmeddelande.\n"
 
-#: builtin/commit.c:1537 builtin/merge.c:935 builtin/merge.c:960
+#: builtin/commit.c:1554 builtin/merge.c:832 builtin/merge.c:857
 msgid "failed to write commit object"
 msgstr "kunde inte skriva incheckningsobjekt"
 
-#: builtin/commit.c:1558
+#: builtin/commit.c:1575
 msgid "cannot lock HEAD ref"
 msgstr "kunde inte låsa HEAD-referens"
 
-#: builtin/commit.c:1562
+#: builtin/commit.c:1579
 msgid "cannot update HEAD ref"
 msgstr "kunde inte uppdatera HEAD-referens"
 
-#: builtin/commit.c:1573
+#: builtin/commit.c:1590
 msgid ""
 "Repository has been updated, but unable to write\n"
 "new_index file. Check that disk is not full or quota is\n"
@@ -3738,115 +3758,115 @@ msgstr ""
 msgid "git config [options]"
 msgstr "git config [flaggor]"
 
-#: builtin/config.c:52
+#: builtin/config.c:51
 msgid "Config file location"
 msgstr "Konfigurationsfilens plats"
 
-#: builtin/config.c:53
+#: builtin/config.c:52
 msgid "use global config file"
 msgstr "använd global konfigurationsfil"
 
-#: builtin/config.c:54
+#: builtin/config.c:53
 msgid "use system config file"
 msgstr "använd systemets konfigurationsfil"
 
-#: builtin/config.c:55
+#: builtin/config.c:54
 msgid "use repository config file"
 msgstr "använd arkivets konfigurationsfil"
 
-#: builtin/config.c:56
+#: builtin/config.c:55
 msgid "use given config file"
 msgstr "använd angiven konfigurationsil"
 
-#: builtin/config.c:57
+#: builtin/config.c:56
 msgid "Action"
 msgstr "Åtgärd"
 
-#: builtin/config.c:58
+#: builtin/config.c:57
 msgid "get value: name [value-regex]"
 msgstr "hämta värde: namn [värde-reguttr]"
 
-#: builtin/config.c:59
+#: builtin/config.c:58
 msgid "get all values: key [value-regex]"
 msgstr "hämta alla värden: nyckel [värde-reguttr]"
 
-#: builtin/config.c:60
+#: builtin/config.c:59
 msgid "get values for regexp: name-regex [value-regex]"
 msgstr "hämta värden för reguttr: namn-reguttr [värde-reguttr]"
 
-#: builtin/config.c:61
+#: builtin/config.c:60
 msgid "replace all matching variables: name value [value_regex]"
 msgstr "ersätt alla motsvarande variabler: namn värde [värde-reguttr]"
 
-#: builtin/config.c:62
+#: builtin/config.c:61
 msgid "add a new variable: name value"
 msgstr "lägg till en ny variabel: namn värde"
 
-#: builtin/config.c:63
+#: builtin/config.c:62
 msgid "remove a variable: name [value-regex]"
 msgstr "ta bort en variabel: namn [värde-reguttr]"
 
-#: builtin/config.c:64
+#: builtin/config.c:63
 msgid "remove all matches: name [value-regex]"
 msgstr "ta bort alla träffar: namn [värde-reguttr]"
 
-#: builtin/config.c:65
+#: builtin/config.c:64
 msgid "rename section: old-name new-name"
 msgstr "byt namn på sektion: gammalt-namn nytt-namn"
 
-#: builtin/config.c:66
+#: builtin/config.c:65
 msgid "remove a section: name"
 msgstr "ta bort en sektion: namn"
 
-#: builtin/config.c:67
+#: builtin/config.c:66
 msgid "list all"
 msgstr "visa alla"
 
-#: builtin/config.c:68
+#: builtin/config.c:67
 msgid "open an editor"
 msgstr "öppna textredigeringsprogram"
 
-#: builtin/config.c:69 builtin/config.c:70
+#: builtin/config.c:68 builtin/config.c:69
 msgid "slot"
 msgstr "plats"
 
-#: builtin/config.c:69
+#: builtin/config.c:68
 msgid "find the color configured: [default]"
 msgstr "hitta den inställda färgen: [default]"
 
-#: builtin/config.c:70
+#: builtin/config.c:69
 msgid "find the color setting: [stdout-is-tty]"
 msgstr "hitta färginställningen: [stdout-is-tty]"
 
-#: builtin/config.c:71
+#: builtin/config.c:70
 msgid "Type"
 msgstr "Typ"
 
-#: builtin/config.c:72
+#: builtin/config.c:71
 msgid "value is \"true\" or \"false\""
 msgstr "värdet är \"true\" eller \"false\""
 
-#: builtin/config.c:73
+#: builtin/config.c:72
 msgid "value is decimal number"
 msgstr "värdet är ett decimalt tal"
 
-#: builtin/config.c:74
+#: builtin/config.c:73
 msgid "value is --bool or --int"
 msgstr "värdet är --bool eller --int"
 
-#: builtin/config.c:75
+#: builtin/config.c:74
 msgid "value is a path (file or directory name)"
 msgstr "värdet är en sökväg (fil- eller katalognamn)"
 
-#: builtin/config.c:76
+#: builtin/config.c:75
 msgid "Other"
 msgstr "Andra"
 
-#: builtin/config.c:77
+#: builtin/config.c:76
 msgid "terminate values with NUL byte"
 msgstr "terminera värden med NUL-byte"
 
-#: builtin/config.c:78
+#: builtin/config.c:77
 msgid "respect include directives on lookup"
 msgstr "respektera inkluderingsdirektiv vid uppslag"
 
@@ -3995,31 +4015,31 @@ msgstr "--dirty är inkompatibelt med \"committish\"-värden"
 msgid "'%s': not a regular file or symlink"
 msgstr "\"%s\": inte en normal fil eller symbolisk länk"
 
-#: builtin/diff.c:224
+#: builtin/diff.c:228
 #, c-format
 msgid "invalid option: %s"
 msgstr "ogiltig flagga: %s"
 
-#: builtin/diff.c:301
+#: builtin/diff.c:305
 msgid "Not a git repository"
 msgstr "Inte ett git-arkiv"
 
-#: builtin/diff.c:344
+#: builtin/diff.c:348
 #, c-format
 msgid "invalid object '%s' given."
 msgstr "objektet \"%s\" som angavs är felaktigt."
 
-#: builtin/diff.c:349
+#: builtin/diff.c:353
 #, c-format
 msgid "more than %d trees given: '%s'"
 msgstr "mer än %d träd angavs: \"%s\""
 
-#: builtin/diff.c:359
+#: builtin/diff.c:363
 #, c-format
 msgid "more than two blobs given: '%s'"
 msgstr "mer än två blobbar angavs: \"%s\""
 
-#: builtin/diff.c:367
+#: builtin/diff.c:371
 #, c-format
 msgid "unhandled object '%s' given."
 msgstr "ej hanterat objekt \"%s\" angavs."
@@ -4132,7 +4152,7 @@ msgstr "tillåt uppdatering av HEAD-referens"
 msgid "deepen history of shallow clone"
 msgstr "fördjupa historik för grund klon"
 
-#: builtin/fetch.c:85 builtin/log.c:1083
+#: builtin/fetch.c:85 builtin/log.c:1088
 msgid "dir"
 msgstr "kat"
 
@@ -4304,8 +4324,8 @@ msgid "git fmt-merge-msg [-m <message>] [--log[=<n>]|--no-log] [--file <file>]"
 msgstr ""
 "git fmt-merge-msg [-m <meddelande>] [--log[=<n>]|--no-log] [--file <fil>]"
 
-#: builtin/fmt-merge-msg.c:653 builtin/fmt-merge-msg.c:656 builtin/grep.c:787
-#: builtin/merge.c:188 builtin/show-branch.c:656 builtin/show-ref.c:192
+#: builtin/fmt-merge-msg.c:653 builtin/fmt-merge-msg.c:656 builtin/grep.c:701
+#: builtin/merge.c:188 builtin/show-branch.c:656 builtin/show-ref.c:175
 #: builtin/tag.c:448 parse-options.h:133 parse-options.h:235
 msgid "n"
 msgstr "n"
@@ -4465,225 +4485,225 @@ msgstr "git grep [flaggor] [-e] <mönster> [<rev>...] [[--] <sökväg>...]"
 msgid "grep: failed to create thread: %s"
 msgstr "grep: misslyckades skapa tråd. %s"
 
-#: builtin/grep.c:455
+#: builtin/grep.c:365
 #, c-format
 msgid "Failed to chdir: %s"
 msgstr "Kunde inte byta katalog (chdir): %s"
 
-#: builtin/grep.c:531 builtin/grep.c:565
+#: builtin/grep.c:443 builtin/grep.c:478
 #, c-format
 msgid "unable to read tree (%s)"
 msgstr "kunde inte läsa träd (%s)"
 
-#: builtin/grep.c:579
+#: builtin/grep.c:493
 #, c-format
 msgid "unable to grep from object of type %s"
 msgstr "Kunde inte \"grep\" från objekt av typen %s"
 
-#: builtin/grep.c:637
+#: builtin/grep.c:551
 #, c-format
 msgid "switch `%c' expects a numerical value"
 msgstr "flaggan \"%c\" antar ett numeriskt värde"
 
-#: builtin/grep.c:654
+#: builtin/grep.c:568
 #, c-format
 msgid "cannot open '%s'"
 msgstr "kan inte öppna \"%s\""
 
-#: builtin/grep.c:729
+#: builtin/grep.c:643
 msgid "search in index instead of in the work tree"
 msgstr "sök i indexet istället för i arbetskatalogen"
 
-#: builtin/grep.c:731
+#: builtin/grep.c:645
 msgid "find in contents not managed by git"
 msgstr "sök i innehål som inte hanteras av git"
 
-#: builtin/grep.c:733
+#: builtin/grep.c:647
 msgid "search in both tracked and untracked files"
 msgstr "sök i både spårade och ospårade filer"
 
-#: builtin/grep.c:735
+#: builtin/grep.c:649
 msgid "search also in ignored files"
 msgstr "sök även i ignorerade filer"
 
-#: builtin/grep.c:738
+#: builtin/grep.c:652
 msgid "show non-matching lines"
 msgstr "vis rader som inte träffas"
 
-#: builtin/grep.c:740
+#: builtin/grep.c:654
 msgid "case insensitive matching"
 msgstr "skiftlägesokänslig sökning"
 
-#: builtin/grep.c:742
+#: builtin/grep.c:656
 msgid "match patterns only at word boundaries"
 msgstr "matcha endast mönster vid ordgränser"
 
-#: builtin/grep.c:744
+#: builtin/grep.c:658
 msgid "process binary files as text"
 msgstr "hantera binärfiler som text"
 
-#: builtin/grep.c:746
+#: builtin/grep.c:660
 msgid "don't match patterns in binary files"
 msgstr "träffa inte mönster i binärfiler"
 
-#: builtin/grep.c:749
+#: builtin/grep.c:663
 msgid "descend at most <depth> levels"
 msgstr "gå som mest ned <djup> nivåer"
 
-#: builtin/grep.c:753
+#: builtin/grep.c:667
 msgid "use extended POSIX regular expressions"
 msgstr "använd utökade POSIX-reguljära uttryck"
 
-#: builtin/grep.c:756
+#: builtin/grep.c:670
 msgid "use basic POSIX regular expressions (default)"
 msgstr "använd grundläggande POSIX-reguljära uttryck (standard)"
 
-#: builtin/grep.c:759
+#: builtin/grep.c:673
 msgid "interpret patterns as fixed strings"
 msgstr "tolka mönster som fixerade strängar"
 
-#: builtin/grep.c:762
+#: builtin/grep.c:676
 msgid "use Perl-compatible regular expressions"
 msgstr "använd Perlkompatibla reguljära uttryck"
 
-#: builtin/grep.c:765
+#: builtin/grep.c:679
 msgid "show line numbers"
 msgstr "visa radnummer"
 
-#: builtin/grep.c:766
+#: builtin/grep.c:680
 msgid "don't show filenames"
 msgstr "visa inte filnamn"
 
-#: builtin/grep.c:767
+#: builtin/grep.c:681
 msgid "show filenames"
 msgstr "visa filnamn"
 
-#: builtin/grep.c:769
+#: builtin/grep.c:683
 msgid "show filenames relative to top directory"
 msgstr "visa filnamn relativa till toppkatalogen"
 
-#: builtin/grep.c:771
+#: builtin/grep.c:685
 msgid "show only filenames instead of matching lines"
 msgstr "visa endast filnamn istället för träffade rader"
 
-#: builtin/grep.c:773
+#: builtin/grep.c:687
 msgid "synonym for --files-with-matches"
 msgstr "synonym för --files-with-matches"
 
-#: builtin/grep.c:776
+#: builtin/grep.c:690
 msgid "show only the names of files without match"
 msgstr "visa endast namn på filer utan träffar"
 
-#: builtin/grep.c:778
+#: builtin/grep.c:692
 msgid "print NUL after filenames"
 msgstr "skriv NUL efter filnamn"
 
-#: builtin/grep.c:780
+#: builtin/grep.c:694
 msgid "show the number of matches instead of matching lines"
 msgstr "visa antal träffar istället för träffade rader"
 
-#: builtin/grep.c:781
+#: builtin/grep.c:695
 msgid "highlight matches"
 msgstr "ljusmarkera träffar"
 
-#: builtin/grep.c:783
+#: builtin/grep.c:697
 msgid "print empty line between matches from different files"
 msgstr "skriv tomma rader mellan träffar från olika filer"
 
-#: builtin/grep.c:785
+#: builtin/grep.c:699
 msgid "show filename only once above matches from same file"
 msgstr "visa filnamn endast en gång ovanför träffar från samma fil"
 
-#: builtin/grep.c:788
+#: builtin/grep.c:702
 msgid "show <n> context lines before and after matches"
 msgstr "visa <n> rader sammanhang före och efter träffar"
 
-#: builtin/grep.c:791
+#: builtin/grep.c:705
 msgid "show <n> context lines before matches"
 msgstr "visa <n> rader sammanhang före träffar"
 
-#: builtin/grep.c:793
+#: builtin/grep.c:707
 msgid "show <n> context lines after matches"
 msgstr "visa <n> rader sammanhang efter träffar"
 
-#: builtin/grep.c:794
+#: builtin/grep.c:708
 msgid "shortcut for -C NUM"
 msgstr "genväg för -C NUM"
 
-#: builtin/grep.c:797
+#: builtin/grep.c:711
 msgid "show a line with the function name before matches"
 msgstr "visa en rad med funktionsnamnet före träffen"
 
-#: builtin/grep.c:799
+#: builtin/grep.c:713
 msgid "show the surrounding function"
 msgstr "visa den omkringliggande funktionen"
 
-#: builtin/grep.c:802
+#: builtin/grep.c:716
 msgid "read patterns from file"
 msgstr "läs mönster från fil"
 
-#: builtin/grep.c:804
+#: builtin/grep.c:718
 msgid "match <pattern>"
 msgstr "träffa <mönster>"
 
-#: builtin/grep.c:806
+#: builtin/grep.c:720
 msgid "combine patterns specified with -e"
 msgstr "kombinera mönster som anges med -e"
 
-#: builtin/grep.c:818
+#: builtin/grep.c:732
 msgid "indicate hit with exit status without output"
 msgstr "ange träff med slutstatuskod utan utdata"
 
-#: builtin/grep.c:820
+#: builtin/grep.c:734
 msgid "show only matches from files that match all patterns"
 msgstr "visa endast träffar från filer som träffar alla mönster"
 
-#: builtin/grep.c:822
+#: builtin/grep.c:736
 msgid "show parse tree for grep expression"
 msgstr "visa analysträd för grep-uttryck"
 
-#: builtin/grep.c:826
+#: builtin/grep.c:740
 msgid "pager"
 msgstr "bläddrare"
 
-#: builtin/grep.c:826
+#: builtin/grep.c:740
 msgid "show matching files in the pager"
 msgstr "visa träffade filer i filbläddraren"
 
-#: builtin/grep.c:829
+#: builtin/grep.c:743
 msgid "allow calling of grep(1) (ignored by this build)"
 msgstr "tillåt anropa grep(1) (ignoreras av detta bygge)"
 
-#: builtin/grep.c:830 builtin/show-ref.c:201
+#: builtin/grep.c:744 builtin/show-ref.c:184
 msgid "show usage"
 msgstr "visa användning"
 
-#: builtin/grep.c:921
+#: builtin/grep.c:811
 msgid "no pattern given."
 msgstr "inget mönster angavs."
 
-#: builtin/grep.c:935
+#: builtin/grep.c:825
 #, c-format
 msgid "bad object %s"
 msgstr "felaktigt objekt %s"
 
-#: builtin/grep.c:976
+#: builtin/grep.c:866
 msgid "--open-files-in-pager only works on the worktree"
 msgstr "--open-files-in-pager fungerar endast i arbetskatalogen"
 
-#: builtin/grep.c:999
+#: builtin/grep.c:889
 msgid "--cached or --untracked cannot be used with --no-index."
 msgstr "--cached och --untracked kan inte användas med --no-index."
 
-#: builtin/grep.c:1004
+#: builtin/grep.c:894
 msgid "--no-index or --untracked cannot be used with revs."
 msgstr "--no-index och --untracked kan inte användas med revisioner."
 
-#: builtin/grep.c:1007
+#: builtin/grep.c:897
 msgid "--[no-]exclude-standard cannot be used for tracked contents."
 msgstr "--[no-]exclude-standard kan inte användas för spårat innehåll."
 
-#: builtin/grep.c:1015
+#: builtin/grep.c:905
 msgid "both --cached and trees are given."
 msgstr "både --cached och träd angavs."
 
@@ -5277,219 +5297,219 @@ msgstr "dekoreringsflaggor"
 msgid "Final output: %d %s\n"
 msgstr "Slututdata: %d %s\n"
 
-#: builtin/log.c:403 builtin/log.c:494
+#: builtin/log.c:405 builtin/log.c:497
 #, c-format
 msgid "Could not read object %s"
 msgstr "Kunde inte läsa objektet %s"
 
-#: builtin/log.c:518
+#: builtin/log.c:521
 #, c-format
 msgid "Unknown type: %d"
 msgstr "Okänd typ: %d"
 
-#: builtin/log.c:608
+#: builtin/log.c:613
 msgid "format.headers without value"
 msgstr "format.headers utan värde"
 
-#: builtin/log.c:682
+#: builtin/log.c:687
 msgid "name of output directory is too long"
 msgstr "namnet på utdatakatalogen är för långt"
 
-#: builtin/log.c:693
+#: builtin/log.c:698
 #, c-format
 msgid "Cannot open patch file %s"
 msgstr "Kan inte öppna patchfilen %s"
 
-#: builtin/log.c:707
+#: builtin/log.c:712
 msgid "Need exactly one range."
 msgstr "Behöver precis ett intervall."
 
-#: builtin/log.c:715
+#: builtin/log.c:720
 msgid "Not a range."
 msgstr "Inte ett intervall."
 
-#: builtin/log.c:789
+#: builtin/log.c:794
 msgid "Cover letter needs email format"
 msgstr "Omslagsbrevet behöver e-postformat"
 
-#: builtin/log.c:862
+#: builtin/log.c:867
 #, c-format
 msgid "insane in-reply-to: %s"
 msgstr "tokigt in-reply-to: %s"
 
-#: builtin/log.c:890
+#: builtin/log.c:895
 msgid "git format-patch [options] [<since> | <revision range>]"
 msgstr "git format-patch [flaggor] [<sedan> | <revisionsintervall>]"
 
-#: builtin/log.c:935
+#: builtin/log.c:940
 msgid "Two output directories?"
 msgstr "Två utdatakataloger?"
 
-#: builtin/log.c:1063
+#: builtin/log.c:1068
 msgid "use [PATCH n/m] even with a single patch"
 msgstr "använd [PATCH n/m] även för en ensam patch"
 
-#: builtin/log.c:1066
+#: builtin/log.c:1071
 msgid "use [PATCH] even with multiple patches"
 msgstr "använd [PATCH] även för flera patchar"
 
-#: builtin/log.c:1070
+#: builtin/log.c:1075
 msgid "print patches to standard out"
 msgstr "skriv patcharna på stnadard ut"
 
-#: builtin/log.c:1072
+#: builtin/log.c:1077
 msgid "generate a cover letter"
 msgstr "generera ett följebrev"
 
-#: builtin/log.c:1074
+#: builtin/log.c:1079
 msgid "use simple number sequence for output file names"
 msgstr "använd enkel nummersekvens för utdatafilnamn"
 
-#: builtin/log.c:1075
+#: builtin/log.c:1080
 msgid "sfx"
 msgstr "sfx"
 
-#: builtin/log.c:1076
+#: builtin/log.c:1081
 msgid "use <sfx> instead of '.patch'"
 msgstr "använd <sfx> istället för \".patch\""
 
-#: builtin/log.c:1078
+#: builtin/log.c:1083
 msgid "start numbering patches at <n> instead of 1"
 msgstr "börja numrera patchar på <n> istället för 1"
 
-#: builtin/log.c:1080
+#: builtin/log.c:1085
 msgid "Use [<prefix>] instead of [PATCH]"
 msgstr "Använd [<prefix>] istället för [PATCH]"
 
-#: builtin/log.c:1083
+#: builtin/log.c:1088
 msgid "store resulting files in <dir>"
 msgstr "spara filerna i <katalog>"
 
-#: builtin/log.c:1086
+#: builtin/log.c:1091
 msgid "don't strip/add [PATCH]"
 msgstr "ta inte bort eller lägg till [PATCH]"
 
-#: builtin/log.c:1089
+#: builtin/log.c:1094
 msgid "don't output binary diffs"
 msgstr "skriv inte binära diffar"
 
-#: builtin/log.c:1091
+#: builtin/log.c:1096
 msgid "don't include a patch matching a commit upstream"
 msgstr "ta inte med patchar som motsvarar en uppströmsincheckning"
 
-#: builtin/log.c:1093
+#: builtin/log.c:1098
 msgid "show patch format instead of default (patch + stat)"
 msgstr "visa patchformat istället för standard (patch + stat)"
 
-#: builtin/log.c:1095
+#: builtin/log.c:1100
 msgid "Messaging"
 msgstr "E-post"
 
-#: builtin/log.c:1096
+#: builtin/log.c:1101
 msgid "header"
 msgstr "huvud"
 
-#: builtin/log.c:1097
+#: builtin/log.c:1102
 msgid "add email header"
 msgstr "lägg till e-posthuvud"
 
-#: builtin/log.c:1098 builtin/log.c:1100
+#: builtin/log.c:1103 builtin/log.c:1105
 msgid "email"
 msgstr "epost"
 
-#: builtin/log.c:1098
+#: builtin/log.c:1103
 msgid "add To: header"
 msgstr "Lägg till mottagarhuvud (\"To:\")"
 
-#: builtin/log.c:1100
+#: builtin/log.c:1105
 msgid "add Cc: header"
 msgstr "Lägg till kopiehuvud (\"Cc:\")"
 
-#: builtin/log.c:1102
+#: builtin/log.c:1107
 msgid "message-id"
 msgstr "meddelande-id"
 
-#: builtin/log.c:1103
+#: builtin/log.c:1108
 msgid "make first mail a reply to <message-id>"
 msgstr "Gör det första brevet ett svar till <meddelande-id>"
 
-#: builtin/log.c:1104 builtin/log.c:1107
+#: builtin/log.c:1109 builtin/log.c:1112
 msgid "boundary"
 msgstr "gräns"
 
-#: builtin/log.c:1105
+#: builtin/log.c:1110
 msgid "attach the patch"
 msgstr "bifoga patchen"
 
-#: builtin/log.c:1108
+#: builtin/log.c:1113
 msgid "inline the patch"
 msgstr "gör patchen ett inline-objekt"
 
-#: builtin/log.c:1112
+#: builtin/log.c:1117
 msgid "enable message threading, styles: shallow, deep"
 msgstr "aktivera brevtrådning, typer: shallow, deep"
 
-#: builtin/log.c:1114
+#: builtin/log.c:1119
 msgid "signature"
 msgstr "signatur"
 
-#: builtin/log.c:1115
+#: builtin/log.c:1120
 msgid "add a signature"
 msgstr "lägg till signatur"
 
-#: builtin/log.c:1117
+#: builtin/log.c:1122
 msgid "don't print the patch filenames"
 msgstr "visa inte filnamn för patchar"
 
-#: builtin/log.c:1157
+#: builtin/log.c:1163
 #, c-format
 msgid "bogus committer info %s"
 msgstr "felaktig incheckarinformation %s"
 
-#: builtin/log.c:1202
+#: builtin/log.c:1208
 msgid "-n and -k are mutually exclusive."
 msgstr "-n och -k kan inte användas samtidigt."
 
-#: builtin/log.c:1204
+#: builtin/log.c:1210
 msgid "--subject-prefix and -k are mutually exclusive."
 msgstr "--subject-prefix och -k kan inte användas samtidigt."
 
-#: builtin/log.c:1212
+#: builtin/log.c:1218
 msgid "--name-only does not make sense"
 msgstr "kan inte använda --name-only"
 
-#: builtin/log.c:1214
+#: builtin/log.c:1220
 msgid "--name-status does not make sense"
 msgstr "kan inte använda --name-status"
 
-#: builtin/log.c:1216
+#: builtin/log.c:1222
 msgid "--check does not make sense"
 msgstr "kan inte använda --check"
 
-#: builtin/log.c:1239
+#: builtin/log.c:1245
 msgid "standard output, or directory, which one?"
 msgstr "standard ut, eller katalog, vilken skall det vara?"
 
-#: builtin/log.c:1241
+#: builtin/log.c:1247
 #, c-format
 msgid "Could not create directory '%s'"
 msgstr "Kunde inte skapa katalogen \"%s\""
 
-#: builtin/log.c:1394
+#: builtin/log.c:1400
 msgid "Failed to create output files"
 msgstr "Misslyckades skapa utdatafiler"
 
-#: builtin/log.c:1443
+#: builtin/log.c:1449
 msgid "git cherry [-v] [<upstream> [<head> [<limit>]]]"
 msgstr "git cherry [-v] [<uppström> [<huvud> [<gräns>]]]"
 
-#: builtin/log.c:1498
+#: builtin/log.c:1504
 #, c-format
 msgid ""
 "Could not find a tracked remote branch, please specify <upstream> manually.\n"
 msgstr "Kunde inte hitta en spårad fjärrgren, ange <uppström> manuellt.\n"
 
-#: builtin/log.c:1511 builtin/log.c:1513 builtin/log.c:1525
+#: builtin/log.c:1517 builtin/log.c:1519 builtin/log.c:1531
 #, c-format
 msgid "Unknown commit %s"
 msgstr "Okänd incheckning %s"
@@ -5767,37 +5787,33 @@ msgstr "Felaktig branch.%s.mergeoptions-sträng: %s"
 msgid "git write-tree failed to write a tree"
 msgstr "git write-tree misslyckades skriva ett träd"
 
-#: builtin/merge.c:678
-msgid "failed to read the cache"
-msgstr "misslyckads läsa cachen"
-
-#: builtin/merge.c:709
+#: builtin/merge.c:656
 msgid "Not handling anything other than two heads merge."
 msgstr "Hanterar inte något annat än en sammanslagning av två huvuden."
 
-#: builtin/merge.c:723
+#: builtin/merge.c:670
 #, c-format
 msgid "Unknown option for merge-recursive: -X%s"
 msgstr "Felaktig flagga för merge-recursive: -X%s"
 
-#: builtin/merge.c:737
+#: builtin/merge.c:684
 #, c-format
 msgid "unable to write %s"
 msgstr "kunde inte skriva %s"
 
-#: builtin/merge.c:876
+#: builtin/merge.c:773
 #, c-format
 msgid "Could not read from '%s'"
 msgstr "Kunde inte läsa från \"%s\""
 
-#: builtin/merge.c:885
+#: builtin/merge.c:782
 #, c-format
 msgid "Not committing merge; use 'git commit' to complete the merge.\n"
 msgstr ""
 "Checkar inte in sammanslagningen; använd \"git commit\" för att slutföra "
 "den.\n"
 
-#: builtin/merge.c:891
+#: builtin/merge.c:788
 msgid ""
 "Please enter a commit message to explain why this merge is necessary,\n"
 "especially if it merges an updated upstream into a topic branch.\n"
@@ -5812,53 +5828,53 @@ msgstr ""
 "Rader som inleds med \"#\" kommer ignoreras, och ett tomt meddelande\n"
 "avbryter incheckningen.\n"
 
-#: builtin/merge.c:915
+#: builtin/merge.c:812
 msgid "Empty commit message."
 msgstr "Tomt incheckningsmeddelande."
 
-#: builtin/merge.c:927
+#: builtin/merge.c:824
 #, c-format
 msgid "Wonderful.\n"
 msgstr "Underbart.\n"
 
-#: builtin/merge.c:992
+#: builtin/merge.c:889
 #, c-format
 msgid "Automatic merge failed; fix conflicts and then commit the result.\n"
 msgstr ""
 "Kunde inte slå ihop automatiskt; fixa konflikter och checka in resultatet.\n"
 
-#: builtin/merge.c:1008
+#: builtin/merge.c:905
 #, c-format
 msgid "'%s' is not a commit"
 msgstr "\"%s\" är inte en incheckning"
 
-#: builtin/merge.c:1049
+#: builtin/merge.c:946
 msgid "No current branch."
 msgstr "Inte på någon gren."
 
-#: builtin/merge.c:1051
+#: builtin/merge.c:948
 msgid "No remote for the current branch."
 msgstr "Ingen fjärr för aktuell gren."
 
-#: builtin/merge.c:1053
+#: builtin/merge.c:950
 msgid "No default upstream defined for the current branch."
 msgstr "Ingen standarduppström angiven för aktuell gren."
 
-#: builtin/merge.c:1058
+#: builtin/merge.c:955
 #, c-format
 msgid "No remote tracking branch for %s from %s"
 msgstr "Ingen fjärrspårande gren för %s från %s"
 
-#: builtin/merge.c:1145 builtin/merge.c:1302
+#: builtin/merge.c:1042 builtin/merge.c:1199
 #, c-format
 msgid "%s - not something we can merge"
 msgstr "%s - inte något vi kan slå ihop"
 
-#: builtin/merge.c:1213
+#: builtin/merge.c:1110
 msgid "There is no merge to abort (MERGE_HEAD missing)."
 msgstr "Det finns ingen sammanslagning att avbryta (MERGE_HEAD saknas)."
 
-#: builtin/merge.c:1229 git-pull.sh:31
+#: builtin/merge.c:1126 git-pull.sh:31
 msgid ""
 "You have not concluded your merge (MERGE_HEAD exists).\n"
 "Please, commit your changes before you can merge."
@@ -5866,11 +5882,11 @@ msgstr ""
 "Du har inte avslutat sammanslagningen (MERGE_HEAD finns).\n"
 "Checka in dina ändringar innan du kan slå ihop."
 
-#: builtin/merge.c:1232 git-pull.sh:34
+#: builtin/merge.c:1129 git-pull.sh:34
 msgid "You have not concluded your merge (MERGE_HEAD exists)."
 msgstr "Du har inte avslutat sammanslagningen (MERGE_HEAD finns)."
 
-#: builtin/merge.c:1236
+#: builtin/merge.c:1133
 msgid ""
 "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n"
 "Please, commit your changes before you can merge."
@@ -5878,79 +5894,79 @@ msgstr ""
 "Du har inte avslutat din \"cherry-pick\" (CHERRY_PICK_HEAD finns).\n"
 "Checka in dina ändringar innan du kan slå ihop."
 
-#: builtin/merge.c:1239
+#: builtin/merge.c:1136
 msgid "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists)."
 msgstr "Du har inte avslutat din \"cherry-pick\" (CHERRY_PICK_HEAD finns)."
 
-#: builtin/merge.c:1248
+#: builtin/merge.c:1145
 msgid "You cannot combine --squash with --no-ff."
 msgstr "Du kan inte kombinera --squash med --no-ff."
 
-#: builtin/merge.c:1253
+#: builtin/merge.c:1150
 msgid "You cannot combine --no-ff with --ff-only."
 msgstr "Du kan inte kombinera --no-ff med --ff-only."
 
-#: builtin/merge.c:1260
+#: builtin/merge.c:1157
 msgid "No commit specified and merge.defaultToUpstream not set."
 msgstr "Ingen incheckning angiven och merge.defaultToUpstream är ej satt."
 
-#: builtin/merge.c:1292
+#: builtin/merge.c:1189
 msgid "Can merge only exactly one commit into empty head"
 msgstr "Kan endast slå ihop en enda incheckning i ett tomt huvud."
 
-#: builtin/merge.c:1295
+#: builtin/merge.c:1192
 msgid "Squash commit into empty head not supported yet"
 msgstr "Stöder inte en tillplattningsincheckning på ett tomt huvud ännu"
 
-#: builtin/merge.c:1297
+#: builtin/merge.c:1194
 msgid "Non-fast-forward commit does not make sense into an empty head"
 msgstr "Icke-snabbspolad incheckning kan inte användas med ett tomt huvud"
 
-#: builtin/merge.c:1412
+#: builtin/merge.c:1309
 #, c-format
 msgid "Updating %s..%s\n"
 msgstr "Uppdaterar %s..%s\n"
 
-#: builtin/merge.c:1450
+#: builtin/merge.c:1348
 #, c-format
 msgid "Trying really trivial in-index merge...\n"
 msgstr "Försöker riktigt enkel sammanslagning i indexet...\n"
 
-#: builtin/merge.c:1457
+#: builtin/merge.c:1355
 #, c-format
 msgid "Nope.\n"
 msgstr "Nej.\n"
 
-#: builtin/merge.c:1489
+#: builtin/merge.c:1387
 msgid "Not possible to fast-forward, aborting."
 msgstr "Kan inte snabbspola, avbryter."
 
-#: builtin/merge.c:1512 builtin/merge.c:1591
+#: builtin/merge.c:1410 builtin/merge.c:1489
 #, c-format
 msgid "Rewinding the tree to pristine...\n"
 msgstr "Återspolar trädet till orört...\n"
 
-#: builtin/merge.c:1516
+#: builtin/merge.c:1414
 #, c-format
 msgid "Trying merge strategy %s...\n"
 msgstr "Försöker sammanslagninsstrategin %s...\n"
 
-#: builtin/merge.c:1582
+#: builtin/merge.c:1480
 #, c-format
 msgid "No merge strategy handled the merge.\n"
 msgstr "Ingen sammanslagningsstrategi hanterade sammanslagningen.\n"
 
-#: builtin/merge.c:1584
+#: builtin/merge.c:1482
 #, c-format
 msgid "Merge with strategy %s failed.\n"
 msgstr "Sammanslagning med strategin %s misslyckades.\n"
 
-#: builtin/merge.c:1593
+#: builtin/merge.c:1491
 #, c-format
 msgid "Using the %s to prepare resolving by hand.\n"
 msgstr "Använder %s för att förbereda lösning för hand.\n"
 
-#: builtin/merge.c:1605
+#: builtin/merge.c:1503
 #, c-format
 msgid "Automatic merge went well; stopped before committing as requested\n"
 msgstr ""
@@ -6519,143 +6535,143 @@ msgstr "git pack-objects [flaggor...] basnamn [< reflista | < objektlista]"
 msgid "deflate error (%d)"
 msgstr "fel i deflate (%d)"
 
-#: builtin/pack-objects.c:2398
+#: builtin/pack-objects.c:2397
 #, c-format
 msgid "unsupported index version %s"
 msgstr "indexversionen %s stöds ej"
 
-#: builtin/pack-objects.c:2402
+#: builtin/pack-objects.c:2401
 #, c-format
 msgid "bad index version '%s'"
 msgstr "felaktig indexversion \"%s\""
 
-#: builtin/pack-objects.c:2425
+#: builtin/pack-objects.c:2424
 #, c-format
 msgid "option %s does not accept negative form"
 msgstr "flaggan %s godtar inte negativ form"
 
-#: builtin/pack-objects.c:2429
+#: builtin/pack-objects.c:2428
 #, c-format
 msgid "unable to parse value '%s' for option %s"
 msgstr "kunde inte tolka värdet \"%s\" för flaggan %s"
 
-#: builtin/pack-objects.c:2448
+#: builtin/pack-objects.c:2447
 msgid "do not show progress meter"
 msgstr "visa inte förloppsindikator"
 
-#: builtin/pack-objects.c:2450
+#: builtin/pack-objects.c:2449
 msgid "show progress meter"
 msgstr "visa förloppsindikator"
 
-#: builtin/pack-objects.c:2452
+#: builtin/pack-objects.c:2451
 msgid "show progress meter during object writing phase"
 msgstr "visa förloppsindikator under objektskrivningsfasen"
 
-#: builtin/pack-objects.c:2455
+#: builtin/pack-objects.c:2454
 msgid "similar to --all-progress when progress meter is shown"
 msgstr "som --all-progress när förloppsmätaren visas"
 
-#: builtin/pack-objects.c:2456
+#: builtin/pack-objects.c:2455
 msgid "version[,offset]"
 msgstr "version[,offset]"
 
-#: builtin/pack-objects.c:2457
+#: builtin/pack-objects.c:2456
 msgid "write the pack index file in the specified idx format version"
 msgstr "skriv paketindexfilen i angiven indexformatversion"
 
-#: builtin/pack-objects.c:2460
+#: builtin/pack-objects.c:2459
 msgid "maximum size of each output pack file"
 msgstr "maximal storlek på varje utdatapaketfil"
 
-#: builtin/pack-objects.c:2462
+#: builtin/pack-objects.c:2461
 msgid "ignore borrowed objects from alternate object store"
 msgstr "ignorera lånade objekt från alternativa objektlager"
 
-#: builtin/pack-objects.c:2464
+#: builtin/pack-objects.c:2463
 msgid "ignore packed objects"
 msgstr "ignorera packade objekt"
 
-#: builtin/pack-objects.c:2466
+#: builtin/pack-objects.c:2465
 msgid "limit pack window by objects"
 msgstr "begränsa paketfönster efter objekt"
 
-#: builtin/pack-objects.c:2468
+#: builtin/pack-objects.c:2467
 msgid "limit pack window by memory in addition to object limit"
 msgstr "begränsa paketfönster efter minne förutom objektgräns"
 
-#: builtin/pack-objects.c:2470
+#: builtin/pack-objects.c:2469
 msgid "maximum length of delta chain allowed in the resulting pack"
 msgstr "maximal längd på deltakedja tillåten i slutligt paket"
 
-#: builtin/pack-objects.c:2472
+#: builtin/pack-objects.c:2471
 msgid "reuse existing deltas"
 msgstr "återanvänd befintliga delta"
 
-#: builtin/pack-objects.c:2474
+#: builtin/pack-objects.c:2473
 msgid "reuse existing objects"
 msgstr "återanvänd befintliga objekt"
 
-#: builtin/pack-objects.c:2476
+#: builtin/pack-objects.c:2475
 msgid "use OFS_DELTA objects"
 msgstr "använd OFS_DELTA-objekt"
 
-#: builtin/pack-objects.c:2478
+#: builtin/pack-objects.c:2477
 msgid "use threads when searching for best delta matches"
 msgstr "använd trådar vid sökning efter bästa deltaträffar"
 
-#: builtin/pack-objects.c:2480
+#: builtin/pack-objects.c:2479
 msgid "do not create an empty pack output"
 msgstr "försök inte skapa tom paketutdata"
 
-#: builtin/pack-objects.c:2482
+#: builtin/pack-objects.c:2481
 msgid "read revision arguments from standard input"
 msgstr "läs revisionsargument från standard in"
 
-#: builtin/pack-objects.c:2484
+#: builtin/pack-objects.c:2483
 msgid "limit the objects to those that are not yet packed"
 msgstr "begränsa objekt till de som ännu inte packats"
 
-#: builtin/pack-objects.c:2487
+#: builtin/pack-objects.c:2486
 msgid "include objects reachable from any reference"
 msgstr "inkludera objekt som kan nås från någon referens"
 
-#: builtin/pack-objects.c:2490
+#: builtin/pack-objects.c:2489
 msgid "include objects referred by reflog entries"
 msgstr "inkludera objekt som refereras från referensloggposter"
 
-#: builtin/pack-objects.c:2493
+#: builtin/pack-objects.c:2492
 msgid "output pack to stdout"
 msgstr "skriv paket på standard ut"
 
-#: builtin/pack-objects.c:2495
+#: builtin/pack-objects.c:2494
 msgid "include tag objects that refer to objects to be packed"
 msgstr "inkludera taggobjekt som refererar objekt som skall packas"
 
-#: builtin/pack-objects.c:2497
+#: builtin/pack-objects.c:2496
 msgid "keep unreachable objects"
 msgstr "behåll onåbara objekt"
 
-#: builtin/pack-objects.c:2498 parse-options.h:141
+#: builtin/pack-objects.c:2497 parse-options.h:141
 msgid "time"
 msgstr "tid"
 
-#: builtin/pack-objects.c:2499
+#: builtin/pack-objects.c:2498
 msgid "unpack unreachable objects newer than <time>"
 msgstr "packa upp onåbara objekt nyare än <tid>"
 
-#: builtin/pack-objects.c:2502
+#: builtin/pack-objects.c:2501
 msgid "create thin packs"
 msgstr "skapa tunna paket"
 
-#: builtin/pack-objects.c:2504
+#: builtin/pack-objects.c:2503
 msgid "ignore packs that have companion .keep file"
 msgstr "ignorera paket som har tillhörande .keep-fil"
 
-#: builtin/pack-objects.c:2506
+#: builtin/pack-objects.c:2505
 msgid "pack compression level"
 msgstr "komprimeringsgrad för paket"
 
-#: builtin/pack-objects.c:2508
+#: builtin/pack-objects.c:2507
 msgid "do not hide commits by grafts"
 msgstr "göm inte incheckningar med ympningar (\"grafts\")"
 
@@ -7556,15 +7572,15 @@ msgstr "git replace -d <objekt>..."
 msgid "git replace -l [<pattern>]"
 msgstr "git replace -l [<mönster>]"
 
-#: builtin/replace.c:118
+#: builtin/replace.c:121
 msgid "list replace refs"
 msgstr "visa ersättningsreferenser"
 
-#: builtin/replace.c:119
+#: builtin/replace.c:122
 msgid "delete replace refs"
 msgstr "ta bort ersättningsreferenser"
 
-#: builtin/replace.c:120
+#: builtin/replace.c:123
 msgid "replace the ref if it exists"
 msgstr "ersätt referensen om den finns"
 
@@ -7810,11 +7826,21 @@ msgstr "\"revert\" misslyckades"
 msgid "cherry-pick failed"
 msgstr "\"cherry-pick\" misslyckades"
 
-#: builtin/rm.c:14
+#: builtin/rm.c:15
 msgid "git rm [options] [--] <file>..."
 msgstr "git rm [flaggor] [--] <fil>..."
 
-#: builtin/rm.c:109
+#: builtin/rm.c:64 builtin/rm.c:186
+#, c-format
+msgid ""
+"submodule '%s' (or one of its nested submodules) uses a .git directory\n"
+"(use 'rm -rf' if you really want to remove it including all of its history)"
+msgstr ""
+"undermodulen \"%s\" (eller en av dess undermoduler) använder en .git-"
+"katalog\n"
+"(använd \"rm -rf\" om du verkligen vill ta bort den och all dess historik)"
+
+#: builtin/rm.c:174
 #, c-format
 msgid ""
 "'%s' has staged content different from both the file and the HEAD\n"
@@ -7823,7 +7849,7 @@ msgstr ""
 "\"%s\" har köat ändringar som skiljer sig både från filen och HEAD\n"
 "(använd -f för att tvinga borttagning)"
 
-#: builtin/rm.c:115
+#: builtin/rm.c:180
 #, c-format
 msgid ""
 "'%s' has changes staged in the index\n"
@@ -7832,7 +7858,7 @@ msgstr ""
 "\"%s\" har köade ändringar i indexet\n"
 "(använd --cached för att behålla filen eller -f för att tvinga borttagning)"
 
-#: builtin/rm.c:119
+#: builtin/rm.c:191
 #, c-format
 msgid ""
 "'%s' has local modifications\n"
@@ -7841,32 +7867,32 @@ msgstr ""
 "\"%s\" har lokala ändringar\n"
 "(använd --cached för att behålla filen eller -f för att tvinga borttagning)"
 
-#: builtin/rm.c:134
+#: builtin/rm.c:207
 msgid "do not list removed files"
 msgstr "lista inte borttagna filer"
 
-#: builtin/rm.c:135
+#: builtin/rm.c:208
 msgid "only remove from the index"
 msgstr "ta bara bort från indexet"
 
-#: builtin/rm.c:136
+#: builtin/rm.c:209
 msgid "override the up-to-date check"
 msgstr "överstyr àjour-testet"
 
-#: builtin/rm.c:137
+#: builtin/rm.c:210
 msgid "allow recursive removal"
 msgstr "tillåt rekursiv borttagning"
 
-#: builtin/rm.c:139
+#: builtin/rm.c:212
 msgid "exit with a zero status even if nothing matched"
 msgstr "avsluta med nollstatus även om inget träffades"
 
-#: builtin/rm.c:194
+#: builtin/rm.c:268
 #, c-format
 msgid "not removing '%s' recursively without -r"
 msgstr "tar inte bort \"%s\" rekursivt utan -r"
 
-#: builtin/rm.c:230
+#: builtin/rm.c:307
 #, c-format
 msgid "git rm: unable to remove %s"
 msgstr "git rm: kan inte ta bort %s"
@@ -7993,35 +8019,35 @@ msgstr ""
 msgid "git show-ref --exclude-existing[=pattern] < ref-list"
 msgstr "git show-ref --exclude-existing[=mönster] < reflista"
 
-#: builtin/show-ref.c:182
+#: builtin/show-ref.c:165
 msgid "only show tags (can be combined with heads)"
 msgstr "visa endast taggar (kan kombineras med huvuden)"
 
-#: builtin/show-ref.c:183
+#: builtin/show-ref.c:166
 msgid "only show heads (can be combined with tags)"
 msgstr "visa endast huvuden (kan kombineras med taggar)"
 
-#: builtin/show-ref.c:184
+#: builtin/show-ref.c:167
 msgid "stricter reference checking, requires exact ref path"
 msgstr "striktare referenskontroll, kräver exakt referenssökväg"
 
-#: builtin/show-ref.c:187 builtin/show-ref.c:189
+#: builtin/show-ref.c:170 builtin/show-ref.c:172
 msgid "show the HEAD reference"
 msgstr "visa HEAD-referensen"
 
-#: builtin/show-ref.c:191
+#: builtin/show-ref.c:174
 msgid "dereference tags into object IDs"
 msgstr "avreferera taggar till objekt-id"
 
-#: builtin/show-ref.c:193
+#: builtin/show-ref.c:176
 msgid "only show SHA1 hash using <n> digits"
 msgstr "visa SHA1-hash endast med <n> siffror"
 
-#: builtin/show-ref.c:197
+#: builtin/show-ref.c:180
 msgid "do not print results to stdout (useful with --verify)"
 msgstr "visa inte resultat på standard ut (användbart med --verify)"
 
-#: builtin/show-ref.c:199
+#: builtin/show-ref.c:182
 msgid "show refs from stdin that aren't in local repository"
 msgstr "visa referenser från standard in som inte finns i lokalt arkiv"
 
@@ -8029,20 +8055,28 @@ msgstr "visa referenser från standard in som inte finns i lokalt arkiv"
 msgid "git symbolic-ref [options] name [ref]"
 msgstr "git symbolic-ref [flaggor] namn [ref]"
 
-#: builtin/symbolic-ref.c:38
+#: builtin/symbolic-ref.c:8
+msgid "git symbolic-ref -d [-q] name"
+msgstr "git symbolic-ref -d [-q] namn"
+
+#: builtin/symbolic-ref.c:40
 msgid "suppress error message for non-symbolic (detached) refs"
 msgstr ""
 "undertryck felmeddelanden för icke-symboliska (frånkopplade) referenser"
 
-#: builtin/symbolic-ref.c:39
+#: builtin/symbolic-ref.c:41
+msgid "delete symbolic ref"
+msgstr "ta bort symbolisk referens"
+
+#: builtin/symbolic-ref.c:42
 msgid "shorten ref output"
 msgstr "förkorta ref-utdata"
 
-#: builtin/symbolic-ref.c:40 builtin/update-ref.c:18
+#: builtin/symbolic-ref.c:43 builtin/update-ref.c:18
 msgid "reason"
 msgstr "skäl"
 
-#: builtin/symbolic-ref.c:40 builtin/update-ref.c:18
+#: builtin/symbolic-ref.c:43 builtin/update-ref.c:18
 msgid "reason of the update"
 msgstr "skäl till uppdateringen"
 
@@ -8266,111 +8300,111 @@ msgstr "Uppdaterad tagg \"%s\" (var %s)\n"
 msgid "git update-index [options] [--] [<file>...]"
 msgstr "git update-index [flaggor] [--] [<fil>...]"
 
-#: builtin/update-index.c:717
+#: builtin/update-index.c:718
 msgid "continue refresh even when index needs update"
 msgstr "fortsätt uppdatera även när index inte är àjour"
 
-#: builtin/update-index.c:720
+#: builtin/update-index.c:721
 msgid "refresh: ignore submodules"
 msgstr "refresh: ignorera undermoduler"
 
-#: builtin/update-index.c:723
+#: builtin/update-index.c:724
 msgid "do not ignore new files"
 msgstr "ignorera inte nya filer"
 
-#: builtin/update-index.c:725
+#: builtin/update-index.c:726
 msgid "let files replace directories and vice-versa"
 msgstr "låt filer ersätta kataloger och omvänt"
 
-#: builtin/update-index.c:727
+#: builtin/update-index.c:728
 msgid "notice files missing from worktree"
 msgstr "lägg märke till filer som saknas i arbetskatalogen"
 
-#: builtin/update-index.c:729
+#: builtin/update-index.c:730
 msgid "refresh even if index contains unmerged entries"
 msgstr "uppdatera även om indexet innehåller ej sammanslagna poster"
 
-#: builtin/update-index.c:732
+#: builtin/update-index.c:733
 msgid "refresh stat information"
 msgstr "uppdatera statusinformation"
 
-#: builtin/update-index.c:736
+#: builtin/update-index.c:737
 msgid "like --refresh, but ignore assume-unchanged setting"
 msgstr "som --refresh, men ignorera assume-unchanged-inställning"
 
-#: builtin/update-index.c:740
+#: builtin/update-index.c:741
 msgid "<mode> <object> <path>"
 msgstr "<läge> <objekt> <sökväg>"
 
-#: builtin/update-index.c:741
+#: builtin/update-index.c:742
 msgid "add the specified entry to the index"
 msgstr "lägg till angiven post i indexet"
 
-#: builtin/update-index.c:745
+#: builtin/update-index.c:746
 msgid "(+/-)x"
 msgstr "(+/-)x"
 
-#: builtin/update-index.c:746
+#: builtin/update-index.c:747
 msgid "override the executable bit of the listed files"
 msgstr "överstyr exekveringsbiten för angivna filer"
 
-#: builtin/update-index.c:750
+#: builtin/update-index.c:751
 msgid "mark files as \"not changing\""
 msgstr "markera filer som \"ändras inte\""
 
-#: builtin/update-index.c:753
+#: builtin/update-index.c:754
 msgid "clear assumed-unchanged bit"
 msgstr "rensa \"assume-unchanged\"-biten"
 
-#: builtin/update-index.c:756
+#: builtin/update-index.c:757
 msgid "mark files as \"index-only\""
 msgstr "markera filer som \"endast index\""
 
-#: builtin/update-index.c:759
+#: builtin/update-index.c:760
 msgid "clear skip-worktree bit"
 msgstr "töm \"skip-worktree\"-biten"
 
-#: builtin/update-index.c:762
+#: builtin/update-index.c:763
 msgid "add to index only; do not add content to object database"
 msgstr "lägg endast till indexet; lägg inte till innehållet i objektdatabasen"
 
-#: builtin/update-index.c:764
+#: builtin/update-index.c:765
 msgid "remove named paths even if present in worktree"
 msgstr "ta bort namngivna sökvägar även om de finns i arbetskatalogen"
 
-#: builtin/update-index.c:766
+#: builtin/update-index.c:767
 msgid "with --stdin: input lines are terminated by null bytes"
 msgstr "med --stdin: indatarader termineras med null-byte"
 
-#: builtin/update-index.c:768
+#: builtin/update-index.c:769
 msgid "read list of paths to be updated from standard input"
 msgstr "läs lista över sökvägar att uppdatera från standard in"
 
-#: builtin/update-index.c:772
+#: builtin/update-index.c:773
 msgid "add entries from standard input to the index"
 msgstr "lägg poster från från standard in till indexet"
 
-#: builtin/update-index.c:776
+#: builtin/update-index.c:777
 msgid "repopulate stages #2 and #3 for the listed paths"
 msgstr "återfyll etapp 2 och 3 från angivna sökvägar"
 
-#: builtin/update-index.c:780
+#: builtin/update-index.c:781
 msgid "only update entries that differ from HEAD"
 msgstr "uppdatera endast poster som skiljer sig från HEAD"
 
-#: builtin/update-index.c:784
+#: builtin/update-index.c:785
 msgid "ignore files missing from worktree"
 msgstr "ignorera filer som saknas i arbetskatalogen"
 
-#: builtin/update-index.c:787
+#: builtin/update-index.c:788
 msgid "report actions to standard output"
 msgstr "raportera åtgärder på standard ut"
 
-#: builtin/update-index.c:789
+#: builtin/update-index.c:790
 msgid "(for porcelains) forget saved unresolved conflicts"
 msgstr "(för porslin) glöm sparade olösta konflikter"
 
-#: builtin/update-index.c:793
+#: builtin/update-index.c:794
 msgid "write index in this format"
 msgstr "skriv index i detta format"
 
@@ -8888,7 +8922,7 @@ msgstr "uppdaterar en ofödd gren med ändringar som lagts till i indexet"
 #. The working tree and the index file is still based on the
 #. $orig_head commit, but we are merging into $curr_head.
 #. First update the working tree to match $curr_head.
-#: git-pull.sh:228
+#: git-pull.sh:229
 #, sh-format
 msgid ""
 "Warning: fetch updated the current branch head.\n"
@@ -8899,11 +8933,11 @@ msgstr ""
 "Varning: snabbspolar din arbetskatalog från\n"
 "Varning: incheckningen $orig_head."
 
-#: git-pull.sh:253
+#: git-pull.sh:254
 msgid "Cannot merge multiple branches into empty head"
 msgstr "Kan inte slå ihop flera grenar i ett tomt huvud."
 
-#: git-pull.sh:257
+#: git-pull.sh:258
 msgid "Cannot rebase onto multiple branches"
 msgstr "Kan inte utföra en \"rebase\" ovanpå flera grenar"
 
@@ -9160,12 +9194,12 @@ msgstr "Inget grennamn angavs"
 msgid "(To restore them type \"git stash apply\")"
 msgstr "(För att återställa dem, skriv \"git stash apply\")"
 
-#: git-submodule.sh:88
+#: git-submodule.sh:89
 #, sh-format
 msgid "cannot strip one component off url '$remoteurl'"
 msgstr "kan inte ta bort en komponent från url:en \"$remoteurl\""
 
-#: git-submodule.sh:167
+#: git-submodule.sh:168
 #, sh-format
 msgid "No submodule mapping found in .gitmodules for path '$sm_path'"
 msgstr ""
@@ -9181,17 +9215,17 @@ msgstr "Misslyckades klona \"$url\" till undermodulsökvägen \"$sm_path\""
 msgid "Gitdir '$a' is part of the submodule path '$b' or vice versa"
 msgstr "Gitkatalog \"$a\" ingår i underkatalogsökvägen \"$b\" eller omvänt"
 
-#: git-submodule.sh:312
+#: git-submodule.sh:316
 #, sh-format
 msgid "repo URL: '$repo' must be absolute or begin with ./|../"
 msgstr "arkiv-URL: \"$repo\" måste vara absolut eller börja med ./|../"
 
-#: git-submodule.sh:329
+#: git-submodule.sh:333
 #, sh-format
 msgid "'$sm_path' already exists in the index"
 msgstr "\"$sm_path\" finns redan i indexet"
 
-#: git-submodule.sh:333
+#: git-submodule.sh:337
 #, sh-format
 msgid ""
 "The following path is ignored by one of your .gitignore files:\n"
@@ -9202,64 +9236,98 @@ msgstr ""
 "$sm_path\n"
 "Använd -f om du verkligen vill lägga till den"
 
-#: git-submodule.sh:344
+#: git-submodule.sh:355
 #, sh-format
 msgid "Adding existing repo at '$sm_path' to the index"
 msgstr "Lägger till befintligt arkiv i \"$sm_path\" i indexet"
 
-#: git-submodule.sh:346
+#: git-submodule.sh:357
 #, sh-format
 msgid "'$sm_path' already exists and is not a valid git repo"
 msgstr "\"$sm_path\" finns redan och är inte ett giltigt git-arkiv"
 
-#: git-submodule.sh:360
+#: git-submodule.sh:365
+#, sh-format
+msgid "A git directory for '$sm_name' is found locally with remote(s):"
+msgstr "En git-katalog för \"$sm_name\" hittades lokalt med fjärr(ar):"
+
+#: git-submodule.sh:367
+#, sh-format
+msgid ""
+"If you want to reuse this local git directory instead of cloning again from"
+msgstr ""
+"För att återanvända den lokala git-katalogen istället för att på nytt klona "
+"från"
+
+#: git-submodule.sh:369
+#, sh-format
+msgid ""
+"use the '--force' option. If the local git directory is not the correct repo"
+msgstr ""
+"använd flaggan \"--force\". Om den lokala git-katalogen inte är riktigt arkiv"
+
+#: git-submodule.sh:370
+#, sh-format
+msgid ""
+"or you are unsure what this means choose another name with the '--name' "
+"option."
+msgstr ""
+"eller om du är osäker på vad det innebär, välj nytt namn med flaggan \"--name"
+"\"."
+
+#: git-submodule.sh:372
+#, sh-format
+msgid "Reactivating local git directory for submodule '$sm_name'."
+msgstr "Aktiverar lokal git-katalog för undermodulen \"$sm_name\" på nytt."
+
+#: git-submodule.sh:384
 #, sh-format
 msgid "Unable to checkout submodule '$sm_path'"
 msgstr "Kan inte checka ut undermodulen \"$sm_path\""
 
-#: git-submodule.sh:365
+#: git-submodule.sh:389
 #, sh-format
 msgid "Failed to add submodule '$sm_path'"
 msgstr "Misslyckades lägga till undermodulen \"$sm_path\""
 
-#: git-submodule.sh:370
+#: git-submodule.sh:394
 #, sh-format
 msgid "Failed to register submodule '$sm_path'"
 msgstr "Misslyckades registrera undermodulen \"$sm_path\""
 
-#: git-submodule.sh:413
+#: git-submodule.sh:437
 #, sh-format
 msgid "Entering '$prefix$sm_path'"
 msgstr "Går in i \"$prefix$sm_path\""
 
-#: git-submodule.sh:427
+#: git-submodule.sh:451
 #, sh-format
 msgid "Stopping at '$sm_path'; script returned non-zero status."
 msgstr ""
 "Stoppar på \"$sm_path\"; skriptet returnerade en status skild från noll."
 
-#: git-submodule.sh:471
+#: git-submodule.sh:495
 #, sh-format
 msgid "No url found for submodule path '$sm_path' in .gitmodules"
 msgstr "Hittade ingen url för undermodulsökvägen \"$sm_path\" i .gitmodules"
 
-#: git-submodule.sh:480
+#: git-submodule.sh:504
 #, sh-format
 msgid "Failed to register url for submodule path '$sm_path'"
 msgstr "Misslyckades registrera url för underkatalogsökväg \"$sm_path\""
 
-#: git-submodule.sh:482
+#: git-submodule.sh:506
 #, sh-format
 msgid "Submodule '$name' ($url) registered for path '$sm_path'"
 msgstr "Undermodulen \"$name\" ($url) registrerad för sökvägen \"$sm_path\""
 
-#: git-submodule.sh:490
+#: git-submodule.sh:514
 #, sh-format
 msgid "Failed to register update mode for submodule path '$sm_path'"
 msgstr ""
 "Misslyckades registrera uppdateringsläge för undermodulsökväg \"$sm_path\""
 
-#: git-submodule.sh:590
+#: git-submodule.sh:614
 #, sh-format
 msgid ""
 "Submodule path '$sm_path' not initialized\n"
@@ -9268,92 +9336,92 @@ msgstr ""
 "Undermodulen \"$sm_path\" har inte initierats\n"
 "Kanske du vill köra \"update --init\"?"
 
-#: git-submodule.sh:603
+#: git-submodule.sh:627
 #, sh-format
 msgid "Unable to find current revision in submodule path '$sm_path'"
 msgstr "Kan inte hitta aktuell revision i undermodulsökväg \"$sm_path\""
 
-#: git-submodule.sh:622
+#: git-submodule.sh:646
 #, sh-format
 msgid "Unable to fetch in submodule path '$sm_path'"
 msgstr "Kan inte hämta i undermodulsökväg \"$sm_path\""
 
-#: git-submodule.sh:636
+#: git-submodule.sh:660
 #, sh-format
 msgid "Unable to rebase '$sha1' in submodule path '$sm_path'"
 msgstr "Kan inte ombasera \"$sha1\" i undermodulsökväg \"$sm_path\""
 
-#: git-submodule.sh:637
+#: git-submodule.sh:661
 #, sh-format
 msgid "Submodule path '$sm_path': rebased into '$sha1'"
 msgstr "Undermodulsökvägen \"$sm_path\": ombaserade in i \"$sha1\""
 
-#: git-submodule.sh:642
+#: git-submodule.sh:666
 #, sh-format
 msgid "Unable to merge '$sha1' in submodule path '$sm_path'"
 msgstr "Kan inte slå ihop \"$sha1\" i undermodulsökvägen \"$sm_path\""
 
-#: git-submodule.sh:643
+#: git-submodule.sh:667
 #, sh-format
 msgid "Submodule path '$sm_path': merged in '$sha1'"
 msgstr "Undermodulsökvägen \"$sm_path\": sammanslagen i \"$sha1\""
 
-#: git-submodule.sh:648
+#: git-submodule.sh:672
 #, sh-format
 msgid "Unable to checkout '$sha1' in submodule path '$sm_path'"
 msgstr "Kan inte checka ut \"$sha1\" i undermodulsökvägen \"$sm_path\""
 
-#: git-submodule.sh:649
+#: git-submodule.sh:673
 #, sh-format
 msgid "Submodule path '$sm_path': checked out '$sha1'"
 msgstr "Undermodulsökvägen \"$sm_path\": checkade ut \"$sha1\""
 
-#: git-submodule.sh:671 git-submodule.sh:995
+#: git-submodule.sh:695 git-submodule.sh:1017
 #, sh-format
 msgid "Failed to recurse into submodule path '$sm_path'"
 msgstr "Misslyckades rekursera in i undermodulsökvägen \"$sm_path\""
 
-#: git-submodule.sh:779
+#: git-submodule.sh:803
 msgid "The --cached option cannot be used with the --files option"
 msgstr "Flaggan --cached kan inte användas med flaggan --files"
 
 #. unexpected type
-#: git-submodule.sh:819
+#: git-submodule.sh:843
 #, sh-format
 msgid "unexpected mode $mod_dst"
 msgstr "oväntat läge $mod_dst"
 
-#: git-submodule.sh:837
+#: git-submodule.sh:861
 #, sh-format
 msgid "  Warn: $name doesn't contain commit $sha1_src"
 msgstr "  Varning: $name innehåller inte incheckning $sha1_src"
 
-#: git-submodule.sh:840
+#: git-submodule.sh:864
 #, sh-format
 msgid "  Warn: $name doesn't contain commit $sha1_dst"
 msgstr "  Varning: $name innehåller inte incheckning $sha1_dst"
 
-#: git-submodule.sh:843
+#: git-submodule.sh:867
 #, sh-format
 msgid "  Warn: $name doesn't contain commits $sha1_src and $sha1_dst"
 msgstr "  Varning: $name innehåller inte incheckningar $sha1_src och $sha1_dst"
 
-#: git-submodule.sh:868
+#: git-submodule.sh:892
 msgid "blob"
 msgstr "blob"
 
-#: git-submodule.sh:906
+#: git-submodule.sh:930
 msgid "# Submodules changed but not updated:"
 msgstr "# Undermoduler ändrade men inte uppdaterade:"
 
-#: git-submodule.sh:908
+#: git-submodule.sh:932
 msgid "# Submodule changes to be committed:"
 msgstr "# Undermodulers ändringar att checka in:"
 
-#: git-submodule.sh:1054
+#: git-submodule.sh:1080
 #, sh-format
-msgid "Synchronizing submodule url for '$name'"
-msgstr "Synkroniserar undermodul-url för \"$name\""
+msgid "Synchronizing submodule url for '$prefix$sm_path'"
+msgstr "Synkroniserar undermodul-url för \"$prefix$sm_path\""
 
 #~ msgid " 0 files changed"
 #~ msgstr " 0 filer ändrade"
index ca617a3ca087db1cde72adf060b24c71dbef11cf..3de8f351abcdd1e5f13bef60d641b0a1a55ecec8 100644 (file)
--- a/po/vi.po
+++ b/po/vi.po
@@ -6,10 +6,10 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: git-v1.8.0-rc2-4-g42e55\n"
+"Project-Id-Version: git-v1.8.0-273-g2d242\n"
 "Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2012-10-16 08:38+0800\n"
-"PO-Revision-Date: 2012-10-17 08:09+0700\n"
+"POT-Creation-Date: 2012-11-23 14:27+0800\n"
+"PO-Revision-Date: 2012-11-24 07:34+0700\n"
 "Last-Translator: Trần Ngọc Quân <vnwildman@gmail.com>\n"
 "Language-Team: Vietnamese <translation-team-vi@lists.sourceforge.net>\n"
 "Language: vi\n"
@@ -37,9 +37,9 @@ msgid ""
 "or use 'git commit -a'."
 msgstr ""
 "Sửa chúng trong cây làm việc,\n"
-"và sau đó dùng lệnh `git add/rm <tập-tin>'\n"
-"dành riêng cho việc đánh dấu cần giải quyết và tạo lần chuyển giao,\n"
-"hoặc là dùng lệnh `git commit -a'."
+"và sau đó dùng lệnh “git add/rm <tập-tin>” dành riêng\n"
+"cho việc đánh dấu tập tin cần giải quyết và tạo lần chuyển giao,\n"
+"hoặc là dùng lệnh “git commit -a”."
 
 #: archive.c:10
 msgid "git archive [options] <tree-ish> [<path>...]"
@@ -68,7 +68,7 @@ msgstr "fmt"
 msgid "archive format"
 msgstr "định dạng lưu trữ"
 
-#: archive.c:323 builtin/log.c:1079
+#: archive.c:323 builtin/log.c:1084
 msgid "prefix"
 msgstr "tiền tố"
 
@@ -76,9 +76,9 @@ msgstr "tiền tố"
 msgid "prepend prefix to each pathname in the archive"
 msgstr "nối thêm tiền tố vào từng đường dẫn tập tin trong kho lưu"
 
-#: archive.c:325 builtin/archive.c:91 builtin/blame.c:2389
-#: builtin/blame.c:2390 builtin/config.c:56 builtin/fast-export.c:642
-#: builtin/fast-export.c:644 builtin/grep.c:801 builtin/hash-object.c:77
+#: archive.c:325 builtin/archive.c:91 builtin/blame.c:2390
+#: builtin/blame.c:2391 builtin/config.c:55 builtin/fast-export.c:642
+#: builtin/fast-export.c:644 builtin/grep.c:715 builtin/hash-object.c:77
 #: builtin/ls-files.c:494 builtin/ls-files.c:497 builtin/notes.c:540
 #: builtin/notes.c:697 builtin/read-tree.c:107 parse-options.h:149
 msgid "file"
@@ -110,7 +110,7 @@ msgstr "nén nhỏ hơn"
 
 #: archive.c:342
 msgid "list supported archive formats"
-msgstr "liệt kê các kiểu né được hỗ trợ"
+msgstr "liệt kê các kiểu nén được hỗ trợ"
 
 #: archive.c:344 builtin/archive.c:93 builtin/clone.c:85
 msgid "repo"
@@ -128,30 +128,38 @@ msgstr "lệnh"
 msgid "path to the remote git-upload-archive command"
 msgstr "đường dẫn đến lệnh git-upload-pack trên máy chủ"
 
+#: attr.c:259
+msgid ""
+"Negative patterns are forbidden in git attributes\n"
+"Use '\\!' for literal leading exclamation."
+msgstr ""
+"Mấu dạng phủ định bị cấm chỉ dùng trong các thuộc tính của git\n"
+"Dùng '\\!' cho các chuỗi văn bản có dấu chấm than."
+
 #: bundle.c:36
 #, c-format
 msgid "'%s' does not look like a v2 bundle file"
-msgstr "`%s' không giống như tập tin v2 bundle (cụm)"
+msgstr "“%s” không giống như tập tin v2 bundle (cụm)"
 
 #: bundle.c:63
 #, c-format
 msgid "unrecognized header: %s%s (%d)"
 msgstr "phần đầu (header) không được thừa nhận: %s%s (%d)"
 
-#: bundle.c:89 builtin/commit.c:672
+#: bundle.c:89 builtin/commit.c:674
 #, c-format
 msgid "could not open '%s'"
-msgstr "không thể mở `%s'"
+msgstr "không thể mở “%s”"
 
 #: bundle.c:140
 msgid "Repository lacks these prerequisite commits:"
 msgstr "Khó chứa thiếu những lần chuyển giao (commit) cần trước hết này:"
 
 #: bundle.c:164 sequencer.c:562 sequencer.c:994 builtin/log.c:290
-#: builtin/log.c:727 builtin/log.c:1313 builtin/log.c:1529 builtin/merge.c:347
+#: builtin/log.c:732 builtin/log.c:1319 builtin/log.c:1535 builtin/merge.c:347
 #: builtin/shortlog.c:181
 msgid "revision walk setup failed"
-msgstr "Cài đặt việc di chuyển qua các điểm xét lại gặp lỗi"
+msgstr "cài đặt việc di chuyển qua các điểm xét lại gặp lỗi"
 
 #: bundle.c:186
 #, c-format
@@ -175,7 +183,7 @@ msgstr[1] "Lệnh bundle yêu cầu %d tham chiếu (refs) này"
 msgid "rev-list died"
 msgstr "rev-list bị chết"
 
-#: bundle.c:300 builtin/log.c:1209 builtin/shortlog.c:284
+#: bundle.c:300 builtin/log.c:1215 builtin/shortlog.c:284
 #, c-format
 msgid "unrecognized argument: %s"
 msgstr "đối số không được thừa nhận: %s"
@@ -183,7 +191,7 @@ msgstr "đối số không được thừa nhận: %s"
 #: bundle.c:335
 #, c-format
 msgid "ref '%s' is excluded by the rev-list options"
-msgstr "tham chiếu `%s' bị loại trừ bởi các tùy chọn rev-list"
+msgstr "tham chiếu “%s” bị loại trừ bởi các tùy chọn rev-list"
 
 #: bundle.c:380
 msgid "Refusing to create empty bundle."
@@ -200,7 +208,7 @@ msgstr "pack-objects đã chết"
 #: bundle.c:419
 #, c-format
 msgid "cannot create '%s'"
-msgstr "không thể tạo `%s'"
+msgstr "không thể tạo “%s”"
 
 #: bundle.c:441
 msgid "index-pack died"
@@ -218,11 +226,11 @@ msgstr "%s %s không phải là một lần commit!"
 
 #: compat/obstack.c:406 compat/obstack.c:408
 msgid "memory exhausted"
-msgstr "cạn bộ nhớ"
+msgstr "hết bộ nhớ"
 
 #: connected.c:39
 msgid "Could not run 'git rev-list'"
-msgstr "Không thể chạy `git rev-list'"
+msgstr "Không thể chạy “git rev-list”"
 
 #: connected.c:48
 #, c-format
@@ -301,26 +309,26 @@ msgid_plural "%lu years ago"
 msgstr[0] "%lu năm trước"
 msgstr[1] "%lu năm trước"
 
-#: diff.c:105
+#: diff.c:111
 #, c-format
-msgid "  Failed to parse dirstat cut-off percentage '%.*s'\n"
-msgstr "  Gặp lỗi khi phân tích dirstat cắt bỏ phần trăm `%.*s'\n"
+msgid "  Failed to parse dirstat cut-off percentage '%s'\n"
+msgstr "  Gặp lỗi khi phân tích dirstat cắt bỏ phần trăm '%s'\n"
 
-#: diff.c:110
+#: diff.c:116
 #, c-format
-msgid "  Unknown dirstat parameter '%.*s'\n"
-msgstr "  Không hiểu đối số dirstat `%.*s'\n"
+msgid "  Unknown dirstat parameter '%s'\n"
+msgstr "  Không hiểu đối số dirstat '%s'\n"
 
-#: diff.c:210
+#: diff.c:219
 #, c-format
 msgid ""
 "Found errors in 'diff.dirstat' config variable:\n"
 "%s"
 msgstr ""
-"Tìm thấy các lỗi trong biến cấu hình 'diff.dirstat':\n"
+"Tìm thấy các lỗi trong biến cấu hình “diff.dirstat”:\n"
 "%s"
 
-#: diff.c:3458
+#: diff.c:3467
 #, c-format
 msgid ""
 "Failed to parse --dirstat/-X option parameter:\n"
@@ -341,25 +349,25 @@ msgstr "gpg đã không đồng ý dữ liệu"
 msgid "gpg failed to sign the data"
 msgstr "gpg gặp lỗi khi ký dữ liệu"
 
-#: grep.c:1441
+#: grep.c:1622
 #, c-format
 msgid "'%s': unable to read %s"
-msgstr "`%s': không thể đọc %s"
+msgstr "“%s”: không thể đọc %s"
 
-#: grep.c:1458
+#: grep.c:1639
 #, c-format
 msgid "'%s': %s"
-msgstr "`%s': %s"
+msgstr "“%s”: %s"
 
-#: grep.c:1469
+#: grep.c:1650
 #, c-format
 msgid "'%s': short read %s"
-msgstr "`%s': đọc ngắn %s"
+msgstr "“%s”: đọc ngắn %s"
 
 #: help.c:212
 #, c-format
 msgid "available git commands in '%s'"
-msgstr "các lệnh git sẵn sàng để dùng trong `%s'"
+msgstr "các lệnh git sẵn sàng để dùng trong “%s”"
 
 #: help.c:219
 msgid "git commands available from elsewhere on your $PATH"
@@ -371,7 +379,7 @@ msgid ""
 "'%s' appears to be a git command, but we were not\n"
 "able to execute it. Maybe git-%s is broken?"
 msgstr ""
-"`%s' trông như là một lệnh git, nhưng chúng tôi không\n"
+"“%s” trông như là một lệnh git, nhưng chúng tôi không\n"
 "thể thực thi nó. Có lẽ là lệnh git-%s đã bị hỏng?"
 
 #: help.c:332
@@ -384,8 +392,8 @@ msgid ""
 "WARNING: You called a Git command named '%s', which does not exist.\n"
 "Continuing under the assumption that you meant '%s'"
 msgstr ""
-"CẢNH BÁO: Bạn đã gọi lệnh Git có tên `%s', mà nó lại không có sẵn.\n"
-"Giả định rằng ý bạn là `%s'"
+"CẢNH BÁO: Bạn đã gọi lệnh Git có tên “%s”, mà nó lại không có sẵn.\n"
+"Giả định rằng ý bạn là “%s”"
 
 #: help.c:359
 #, c-format
@@ -395,7 +403,7 @@ msgstr "trong %0.1f giây một cách tự động..."
 #: help.c:366
 #, c-format
 msgid "git: '%s' is not a git command. See 'git --help'."
-msgstr "git: `%s' không phải là một lệnh của git. Xem `git --help'."
+msgstr "git: “%s” không phải là một lệnh của git. Xem “git --help”."
 
 #: help.c:370
 msgid ""
@@ -411,6 +419,15 @@ msgstr[1] ""
 "\n"
 "Có phải ý bạn là một trong số những cái này không?"
 
+#: merge.c:56
+msgid "failed to read the cache"
+msgstr "gặp lỗi khi đọc bộ nhớ tạm"
+
+#: merge.c:110 builtin/checkout.c:333 builtin/checkout.c:534
+#: builtin/clone.c:586
+msgid "unable to write new index file"
+msgstr "không thể ghi tập tin lưu bảng mục lục mới"
+
 #: merge-recursive.c:190
 #, c-format
 msgid "(bad commit)\n"
@@ -419,7 +436,7 @@ msgstr "(commit sai)\n"
 #: merge-recursive.c:206
 #, c-format
 msgid "addinfo_cache failed for path '%s'"
-msgstr "addinfo_cache gặp lỗi đối với đường dẫn `%s'"
+msgstr "addinfo_cache gặp lỗi đối với đường dẫn “%s”"
 
 #: merge-recursive.c:268
 msgid "error building trees"
@@ -428,7 +445,7 @@ msgstr "gặp lỗi khi xây dựng cây"
 #: merge-recursive.c:672
 #, c-format
 msgid "failed to create path '%s'%s"
-msgstr "gặp lỗi khi tạo đường dẫn `%s'%s"
+msgstr "gặp lỗi khi tạo đường dẫn “%s”%s"
 
 #: merge-recursive.c:683
 #, c-format
@@ -444,32 +461,32 @@ msgstr ": có lẽ là một xung đột D/F?"
 #: merge-recursive.c:708
 #, c-format
 msgid "refusing to lose untracked file at '%s'"
-msgstr "từ chối đóng tập tin không được theo vết tại `%s'"
+msgstr "từ chối đóng tập tin không được theo vết tại “%s”"
 
 #: merge-recursive.c:748
 #, c-format
 msgid "cannot read object %s '%s'"
-msgstr "không thể đọc đối tượng %s `%s'"
+msgstr "không thể đọc đối tượng %s “%s”"
 
 #: merge-recursive.c:750
 #, c-format
 msgid "blob expected for %s '%s'"
-msgstr "đối tượng blob được mong đợi cho %s `%s'"
+msgstr "đối tượng blob được mong đợi cho %s “%s”"
 
 #: merge-recursive.c:773 builtin/clone.c:302
 #, c-format
 msgid "failed to open '%s'"
-msgstr "gặp lỗi khi mở `%s'"
+msgstr "gặp lỗi khi mở “%s”"
 
 #: merge-recursive.c:781
 #, c-format
 msgid "failed to symlink '%s'"
-msgstr "gặp lỗi khi tạo liên kết tượng trưng (symlink) `%s'"
+msgstr "gặp lỗi khi tạo liên kết tượng trưng (symlink) “%s”"
 
 #: merge-recursive.c:784
 #, c-format
 msgid "do not know what to do with %06o %s '%s'"
-msgstr "không hiểu phải làm gì với %06o %s `%s'"
+msgstr "không hiểu phải làm gì với %06o %s “%s”"
 
 #: merge-recursive.c:922
 msgid "Failed to execute internal merge"
@@ -591,7 +608,7 @@ msgstr "Đã bỏ qua %s (đã có sẵn lần hòa trộn này)"
 msgid "Auto-merging %s"
 msgstr "Tự-động-hòa-trộn %s"
 
-#: merge-recursive.c:1633 git-submodule.sh:869
+#: merge-recursive.c:1633 git-submodule.sh:893
 msgid "submodule"
 msgstr "mô-đun-con"
 
@@ -661,9 +678,9 @@ msgstr "hòa trộn không trả về lần chuyển giao (commit) nào"
 #: merge-recursive.c:1997
 #, c-format
 msgid "Could not parse object '%s'"
-msgstr "Không thể phân tích đối tượng `%s'"
+msgstr "Không thể phân tích đối tượng “%s”"
 
-#: merge-recursive.c:2009 builtin/merge.c:696
+#: merge-recursive.c:2009 builtin/merge.c:643
 msgid "Unable to write index."
 msgstr "Không thể ghi bảng mục lục"
 
@@ -692,8 +709,8 @@ msgstr "    %s"
 #, c-format
 msgid "Your branch is ahead of '%s' by %d commit.\n"
 msgid_plural "Your branch is ahead of '%s' by %d commits.\n"
-msgstr[0] "Nhánh của bạn là đầu của `%s' bởi %d lần chuyển giao (commit).\n"
-msgstr[1] "Nhánh của bạn là đầu của `%s' bởi %d lần chuyển giao (commit).\n"
+msgstr[0] "Nhánh của bạn là đầu của “%s” bởi %d lần chuyển giao (commit).\n"
+msgstr[1] "Nhánh của bạn là đầu của “%s” bởi %d lần chuyển giao (commit).\n"
 
 #: remote.c:1638
 #, c-format
@@ -701,10 +718,10 @@ msgid "Your branch is behind '%s' by %d commit, and can be fast-forwarded.\n"
 msgid_plural ""
 "Your branch is behind '%s' by %d commits, and can be fast-forwarded.\n"
 msgstr[0] ""
-"Nhánh của bạn thì ở đằng sau `%s' bởi %d lần chuyển giao (commit), và có thể "
+"Nhánh của bạn thì ở đằng sau “%s” bởi %d lần chuyển giao (commit), và có thể "
 "được fast-forward.\n"
 msgstr[1] ""
-"Nhánh của bạn thì ở đằng sau `%s' bởi %d lần chuyển giao (commit), và có thể "
+"Nhánh của bạn thì ở đằng sau “%s” bởi %d lần chuyển giao (commit), và có thể "
 "được fast-forward.\n"
 
 #: remote.c:1646
@@ -716,24 +733,24 @@ msgid_plural ""
 "Your branch and '%s' have diverged,\n"
 "and have %d and %d different commits each, respectively.\n"
 msgstr[0] ""
-"Nhánh của bạn và `%s' bị phân kỳ,\n"
+"Nhánh của bạn và “%s” bị phân kỳ,\n"
 "và có %d và %d lần chuyển giao (commit) khác nhau cho từng cái,\n"
 "tương ứng với mỗi lần.\n"
 msgstr[1] ""
-"Your branch and `%s' have diverged,\n"
+"Your branch and “%s” have diverged,\n"
 "and have %d and %d different commit each, respectively.\n"
 
-#: sequencer.c:123 builtin/merge.c:864 builtin/merge.c:977
-#: builtin/merge.c:1087 builtin/merge.c:1097
+#: sequencer.c:123 builtin/merge.c:761 builtin/merge.c:874 builtin/merge.c:984
+#: builtin/merge.c:994
 #, c-format
 msgid "Could not open '%s' for writing"
-msgstr "Không thể mở %s' để ghi"
+msgstr "Không thể mở “%s” để ghi"
 
-#: sequencer.c:125 builtin/merge.c:333 builtin/merge.c:867
-#: builtin/merge.c:1089 builtin/merge.c:1102
+#: sequencer.c:125 builtin/merge.c:333 builtin/merge.c:764 builtin/merge.c:986
+#: builtin/merge.c:999
 #, c-format
 msgid "Could not write to '%s'"
-msgstr "Không thể ghi vào `%s'"
+msgstr "Không thể ghi vào “%s”"
 
 #: sequencer.c:146
 msgid ""
@@ -741,7 +758,7 @@ msgid ""
 "with 'git add <paths>' or 'git rm <paths>'"
 msgstr ""
 "sau khi giải quyết các xung đột, đánh dấu đường dẫn đã sửa\n"
-"với lệnh `git add <đường_dẫn>' hoặc `git rm <đường_dẫn>'"
+"với lệnh “git add <đường_dẫn>” hoặc “git rm <đường_dẫn>”"
 
 #: sequencer.c:149
 msgid ""
@@ -750,8 +767,8 @@ msgid ""
 "and commit the result with 'git commit'"
 msgstr ""
 "sau khi giải quyết các xung đột, đánh dấu đường dẫn đã sửa\n"
-"với lệnh `git add <đường_dẫn>' hoặc `git rm <đường_dẫn>'\n"
-"và chuyển giao (commit) kết quả bằng lệnh `git commit'"
+"với lệnh “git add <đường_dẫn>” hoặc “git rm <đường_dẫn>”\n"
+"và chuyển giao (commit) kết quả bằng lệnh “git commit”"
 
 #: sequencer.c:162 sequencer.c:770 sequencer.c:853
 #, c-format
@@ -953,7 +970,7 @@ msgstr "kết thúc tập tin đột xuất"
 #: sequencer.c:827
 #, c-format
 msgid "stored pre-cherry-pick HEAD file '%s' is corrupt"
-msgstr "tập tin HEAD 'pre-cherry-pick' đã lưu `%s' bị hỏng"
+msgstr "tập tin HEAD “pre-cherry-pick” đã lưu “%s” bị hỏng"
 
 #: sequencer.c:850
 #, c-format
@@ -975,24 +992,24 @@ msgstr "HEAD không chỉ đến một nhánh nào cả"
 #: sha1_name.c:1047
 #, c-format
 msgid "No such branch: '%s'"
-msgstr "Không có nhánh nào như thế: `%s'"
+msgstr "Không có nhánh nào như thế: “%s”"
 
 #: sha1_name.c:1049
 #, c-format
 msgid "No upstream configured for branch '%s'"
-msgstr "Không có thượng nguồn (upstream) được cấu hình cho nhánh `%s'"
+msgstr "Không có thượng nguồn (upstream) được cấu hình cho nhánh “%s”"
 
 #: sha1_name.c:1052
 #, c-format
 msgid "Upstream branch '%s' not stored as a remote-tracking branch"
 msgstr ""
-"Nhánh thượng nguồn (upstream) `%s' không được lưu lại như là một nhánh "
-"'remote-tracking'"
+"Nhánh thượng nguồn (upstream) “%s” không được lưu lại như là một nhánh "
+"“remote-tracking”"
 
 #: wrapper.c:408
 #, c-format
 msgid "unable to access '%s': %s"
-msgstr "không thể truy cập `%s': %s"
+msgstr "không thể truy cập “%s”: %s"
 
 #: wrapper.c:426
 #, c-format
@@ -1177,7 +1194,7 @@ msgstr "  (dùng \"git commit\" để hoàn tất việc hòa trộn)"
 
 #: wt-status.c:804
 msgid "You are in the middle of an am session."
-msgstr "Bạn đang ở giữa của một phiên 'am'."
+msgstr "Bạn đang ở giữa của một phiên “am”."
 
 #: wt-status.c:807
 msgid "The current patch is empty."
@@ -1379,34 +1396,34 @@ msgstr "git add [các-tùy-chọn] [--] <mẫu-tập-tin>..."
 msgid "unexpected diff status %c"
 msgstr "trạng thái lệnh diff không như mong đợi %c"
 
-#: builtin/add.c:67 builtin/commit.c:230
+#: builtin/add.c:67 builtin/commit.c:231
 msgid "updating files failed"
 msgstr "Cập nhật tập tin gặp lỗi"
 
 #: builtin/add.c:77
 #, c-format
 msgid "remove '%s'\n"
-msgstr "gỡ bỏ `%s'\n"
+msgstr "gỡ bỏ “%s”\n"
 
 #: builtin/add.c:176
 #, c-format
 msgid "Path '%s' is in submodule '%.*s'"
-msgstr "Đường dẫn `%s' thì ở trong mô-đun-con `%.*s'"
+msgstr "Đường dẫn “%s” thì ở trong mô-đun-con “%.*s”"
 
 #: builtin/add.c:192
 msgid "Unstaged changes after refreshing the index:"
 msgstr ""
 "Các thay đổi không được lưu trạng thái sau khi làm tươi mới lại bảng mục lục:"
 
-#: builtin/add.c:195 builtin/add.c:460 builtin/rm.c:186
+#: builtin/add.c:195 builtin/add.c:460 builtin/rm.c:260
 #, c-format
 msgid "pathspec '%s' did not match any files"
-msgstr "pathspec `%s' không khớp với bất kỳ tập tin nào"
+msgstr "pathspec “%s” không khớp với bất kỳ tập tin nào"
 
 #: builtin/add.c:209
 #, c-format
 msgid "'%s' is beyond a symbolic link"
-msgstr "`%s' nằm ngoài một liên kết tượng trưng"
+msgstr "“%s” nằm ngoài một liên kết tượng trưng"
 
 #: builtin/add.c:276
 msgid "Could not read the index"
@@ -1415,7 +1432,7 @@ msgstr "Không thể đọc bảng mục lục"
 #: builtin/add.c:286
 #, c-format
 msgid "Could not open '%s' for writing."
-msgstr "Không thể mở `%s' để ghi"
+msgstr "Không thể mở “%s” để ghi"
 
 #: builtin/add.c:290
 msgid "Could not write patch"
@@ -1424,7 +1441,7 @@ msgstr "Không thể ghi ra miếng vá"
 #: builtin/add.c:295
 #, c-format
 msgid "Could not stat '%s'"
-msgstr "không thể lấy trạng thái về `%s'"
+msgstr "không thể lấy trạng thái về “%s”"
 
 #: builtin/add.c:297
 msgid "Empty patch. Aborted."
@@ -1433,7 +1450,7 @@ msgstr "Miếng vá trống rỗng. Đã bỏ qua."
 #: builtin/add.c:303
 #, c-format
 msgid "Could not apply '%s'"
-msgstr "Không thể apply (áp dụng miếng vá) `%s'"
+msgstr "Không thể apply (áp dụng miếng vá) “%s”"
 
 #: builtin/add.c:313
 msgid "The following paths are ignored by one of your .gitignore files:\n"
@@ -1443,12 +1460,12 @@ msgstr ""
 
 #: builtin/add.c:319 builtin/clean.c:52 builtin/fetch.c:78 builtin/mv.c:63
 #: builtin/prune-packed.c:76 builtin/push.c:388 builtin/remote.c:1253
-#: builtin/rm.c:133
+#: builtin/rm.c:206
 msgid "dry run"
 msgstr "chạy thử"
 
-#: builtin/add.c:320 builtin/apply.c:4354 builtin/commit.c:1154
-#: builtin/count-objects.c:82 builtin/fsck.c:613 builtin/log.c:1477
+#: builtin/add.c:320 builtin/apply.c:4354 builtin/commit.c:1160
+#: builtin/count-objects.c:82 builtin/fsck.c:613 builtin/log.c:1483
 #: builtin/mv.c:62 builtin/read-tree.c:112
 msgid "be verbose"
 msgstr "chi tiết"
@@ -1457,9 +1474,9 @@ msgstr "chi tiết"
 msgid "interactive picking"
 msgstr "sửa bằng cách tương tác"
 
-#: builtin/add.c:323 builtin/checkout.c:1028 builtin/reset.c:248
+#: builtin/add.c:323 builtin/checkout.c:1031 builtin/reset.c:248
 msgid "select hunks interactively"
-msgstr "chọn `hunks' một cách tương tác"
+msgstr "chọn “hunks” một cách tương tác"
 
 #: builtin/add.c:324
 msgid "edit current diff and apply"
@@ -1525,14 +1542,14 @@ msgstr "Không có gì được chỉ ra, không có gì được thêm vào.\n"
 #: builtin/add.c:415
 #, c-format
 msgid "Maybe you wanted to say 'git add .'?\n"
-msgstr "Có lẽ bạn muốn là `git add .' phải không?\n"
+msgstr "Có lẽ bạn muốn là “git add .” phải không?\n"
 
-#: builtin/add.c:421 builtin/clean.c:95 builtin/commit.c:290 builtin/mv.c:82
-#: builtin/rm.c:162
+#: builtin/add.c:421 builtin/clean.c:95 builtin/commit.c:291 builtin/mv.c:82
+#: builtin/rm.c:235
 msgid "index file corrupt"
 msgstr "tập tin ghi bảng mục lục bị hỏng"
 
-#: builtin/add.c:481 builtin/apply.c:4450 builtin/mv.c:229 builtin/rm.c:260
+#: builtin/add.c:481 builtin/apply.c:4450 builtin/mv.c:229 builtin/rm.c:355
 msgid "Unable to write new index file"
 msgstr "Không thể ghi tập tin lưu bảng mục lục mới"
 
@@ -1543,12 +1560,12 @@ msgstr "git apply [các-tùy-chọn] [<miếng-vá>...]"
 #: builtin/apply.c:110
 #, c-format
 msgid "unrecognized whitespace option '%s'"
-msgstr "không nhận ra tùy chọn về khoảng trắng `%s'"
+msgstr "không nhận ra tùy chọn về khoảng trắng “%s”"
 
 #: builtin/apply.c:125
 #, c-format
 msgid "unrecognized whitespace ignore option '%s'"
-msgstr "không nhận ra tùy chọn bỏ qua khoảng trắng `%s'"
+msgstr "không nhận ra tùy chọn bỏ qua khoảng trắng “%s”"
 
 #: builtin/apply.c:823
 #, c-format
@@ -1654,7 +1671,7 @@ msgstr "miếng vá định dạng nhị phân không được nhận ra tại d
 #: builtin/apply.c:1984
 #, c-format
 msgid "patch with only garbage at line %d"
-msgstr "vá chỉ với 'garbage' tại dòng %d"
+msgstr "vá chỉ với “garbage” tại dòng %d"
 
 #: builtin/apply.c:2074
 #, c-format
@@ -1673,7 +1690,7 @@ msgstr "ôi?"
 #: builtin/apply.c:2671
 #, c-format
 msgid "invalid start of line: '%c'"
-msgstr "sai khởi đầu dòng: `%c'"
+msgstr "sai khởi đầu dòng: “%c”"
 
 #: builtin/apply.c:2789
 #, c-format
@@ -1699,18 +1716,18 @@ msgstr ""
 #: builtin/apply.c:2826
 #, c-format
 msgid "missing binary patch data for '%s'"
-msgstr "thiếu dữ liệu của miếng vá định dạng nhị phân cho `%s'"
+msgstr "thiếu dữ liệu của miếng vá định dạng nhị phân cho “%s”"
 
 #: builtin/apply.c:2929
 #, c-format
 msgid "binary patch does not apply to '%s'"
-msgstr "miếng vá định dạng nhị phân không được áp dụng cho `%s'"
+msgstr "miếng vá định dạng nhị phân không được áp dụng cho “%s”"
 
 #: builtin/apply.c:2935
 #, c-format
 msgid "binary patch to '%s' creates incorrect result (expecting %s, got %s)"
 msgstr ""
-"vá nhị phân cho `%s' tạo ra kết quả không chính xác (mong chờ %s, lại nhận "
+"vá nhị phân cho “%s” tạo ra kết quả không chính xác (mong chờ %s, lại nhận "
 "%s)"
 
 #: builtin/apply.c:2956
@@ -1795,7 +1812,7 @@ msgstr "Đang kiểm tra miếng vá %s..."
 #: builtin/apply.c:3624 builtin/checkout.c:215 builtin/reset.c:158
 #, c-format
 msgid "make_cache_entry failed for path '%s'"
-msgstr "make_cache_entry gặp lỗi đối với đường dẫn `%s'"
+msgstr "make_cache_entry gặp lỗi đối với đường dẫn “%s”"
 
 #: builtin/apply.c:3767
 #, c-format
@@ -1815,7 +1832,7 @@ msgstr "không thể lấy trạng thái về tập tin %s mới hơn đã đư
 #: builtin/apply.c:3804
 #, c-format
 msgid "unable to create backing store for newly created file %s"
-msgstr "không thể tạo 'backing store' cho tập tin được tạo mới hơn %s"
+msgstr "không thể tạo “backing store” cho tập tin được tạo mới hơn %s"
 
 #: builtin/apply.c:3807 builtin/apply.c:3915
 #, c-format
@@ -1825,12 +1842,12 @@ msgstr "không thể thêm mục nhớ tạm cho %s"
 #: builtin/apply.c:3840
 #, c-format
 msgid "closing file '%s'"
-msgstr "đang đóng tập tin `%s'"
+msgstr "đang đóng tập tin “%s”"
 
 #: builtin/apply.c:3889
 #, c-format
 msgid "unable to write file '%s' mode %o"
-msgstr "không thể ghi vào tập tin `%s' chế độ (mode) %o"
+msgstr "không thể ghi vào tập tin “%s” chế độ (mode) %o"
 
 #: builtin/apply.c:3976
 #, c-format
@@ -2005,7 +2022,7 @@ msgstr "--cached ở ngoài một kho chứa"
 #: builtin/apply.c:4411
 #, c-format
 msgid "can't open patch '%s'"
-msgstr "không thể mở miếng vá `%s'"
+msgstr "không thể mở miếng vá “%s”"
 
 #: builtin/apply.c:4425
 #, c-format
@@ -2024,7 +2041,7 @@ msgstr[1] "%d dòng thêm khoảng trắng lỗi."
 #: builtin/archive.c:17
 #, c-format
 msgid "could not create archive file '%s'"
-msgstr "không thể tạo tập tin kho (lưu trữ, nén) `%s'"
+msgstr "không thể tạo tập tin kho (lưu trữ, nén) “%s”"
 
 #: builtin/archive.c:20
 msgid "could not redirect output"
@@ -2062,7 +2079,7 @@ msgstr "git bisect--helper --next-all [--no-checkout]"
 
 #: builtin/bisect--helper.c:17
 msgid "perform 'git bisect next'"
-msgstr "thực hiện `git bisect next'"
+msgstr "thực hiện “git bisect next”"
 
 #: builtin/bisect--helper.c:19
 msgid "update BISECT_HEAD instead of checking out the current commit"
@@ -2078,97 +2095,97 @@ msgstr "git blame [các-tùy-chọn] [rev-opts] [rev] [--] tập-tin"
 msgid "[rev-opts] are documented in git-rev-list(1)"
 msgstr "[rev-opts] được mô tả trong git-rev-list(1)"
 
-#: builtin/blame.c:2373
+#: builtin/blame.c:2374
 msgid "Show blame entries as we find them, incrementally"
-msgstr "Hiển thị các mục `blame' như là chúng ta thấy chúng, tăng dần"
+msgstr "Hiển thị các mục “blame” như là chúng ta thấy chúng, tăng dần"
 
-#: builtin/blame.c:2374
+#: builtin/blame.c:2375
 msgid "Show blank SHA-1 for boundary commits (Default: off)"
 msgstr ""
-"Hiá»\83n thá»\8b SHA-1 trá»\91ng cho những lần chuyển giao biên giới (Mặc định: off)"
+"Hiá»\83n thá»\8b SHA-1 trắng cho những lần chuyển giao biên giới (Mặc định: off)"
 
-#: builtin/blame.c:2375
+#: builtin/blame.c:2376
 msgid "Do not treat root commits as boundaries (Default: off)"
 msgstr "Không coi các lần chuyển giao gốc là giới hạn (Mặc định: off)"
 
-#: builtin/blame.c:2376
+#: builtin/blame.c:2377
 msgid "Show work cost statistics"
 msgstr "Hiển thị thống kê công sức làm việc"
 
-#: builtin/blame.c:2377
+#: builtin/blame.c:2378
 msgid "Show output score for blame entries"
-msgstr "Hiển thị kết xuất điểm số có các mục tin `blame'"
+msgstr "Hiển thị kết xuất điểm số có các mục tin “blame”"
 
-#: builtin/blame.c:2378
+#: builtin/blame.c:2379
 msgid "Show original filename (Default: auto)"
 msgstr "Hiển thị tên tập tin gốc (Mặc định: auto)"
 
-#: builtin/blame.c:2379
+#: builtin/blame.c:2380
 msgid "Show original linenumber (Default: off)"
 msgstr "Hiển thị số dòng gốc (Mặc định: off)"
 
-#: builtin/blame.c:2380
+#: builtin/blame.c:2381
 msgid "Show in a format designed for machine consumption"
 msgstr "Hiển thị ở định dạng đã thiết kế cho sự tiêu dùng bằng máy"
 
-#: builtin/blame.c:2381
+#: builtin/blame.c:2382
 msgid "Show porcelain format with per-line commit information"
-msgstr "Hiển thị định dạng 'porcelain' với thông tin chuyển giao mỗi dòng"
+msgstr "Hiển thị định dạng “porcelain” với thông tin chuyển giao mỗi dòng"
 
-#: builtin/blame.c:2382
+#: builtin/blame.c:2383
 msgid "Use the same output mode as git-annotate (Default: off)"
 msgstr "Dùng cùng chế độ xuất ra vóigit-annotate (Mặc định: off)"
 
-#: builtin/blame.c:2383
+#: builtin/blame.c:2384
 msgid "Show raw timestamp (Default: off)"
 msgstr "Hiển thị dấu vết thời gian dạng thô (Mặc định: off)"
 
-#: builtin/blame.c:2384
+#: builtin/blame.c:2385
 msgid "Show long commit SHA1 (Default: off)"
 msgstr "Hiển thị SHA1 của lần chuyển giao (commit) dạng dài (Mặc định: off)"
 
-#: builtin/blame.c:2385
+#: builtin/blame.c:2386
 msgid "Suppress author name and timestamp (Default: off)"
 msgstr "Không hiển thị tên tác giả và dấu vết thời gian (Mặc định: off)"
 
-#: builtin/blame.c:2386
+#: builtin/blame.c:2387
 msgid "Show author email instead of name (Default: off)"
 msgstr "Hiển thị thư điện tử của tác giả thay vì tên (Mặc định: off)"
 
-#: builtin/blame.c:2387
+#: builtin/blame.c:2388
 msgid "Ignore whitespace differences"
 msgstr "Bỏ qua các khác biệt do khoảng trắng gây ra"
 
-#: builtin/blame.c:2388
+#: builtin/blame.c:2389
 msgid "Spend extra cycles to find better match"
 msgstr "Tiêu thụ thêm năng tài nguyên máy móc để tìm kiếm tốt hơn nữa"
 
-#: builtin/blame.c:2389
+#: builtin/blame.c:2390
 msgid "Use revisions from <file> instead of calling git-rev-list"
 msgstr ""
-"Sử dụng điểm xét duyệt (revision) từ <tập tin> thay vì gọi `git-rev-list'"
+"Sử dụng điểm xét duyệt (revision) từ <tập tin> thay vì gọi “git-rev-list”"
 
-#: builtin/blame.c:2390
+#: builtin/blame.c:2391
 msgid "Use <file>'s contents as the final image"
 msgstr "Sử dụng nội dung của <tập tin> như là ảnh cuối cùng"
 
-#: builtin/blame.c:2391 builtin/blame.c:2392
+#: builtin/blame.c:2392 builtin/blame.c:2393
 msgid "score"
 msgstr "điểm số"
 
-#: builtin/blame.c:2391
+#: builtin/blame.c:2392
 msgid "Find line copies within and across files"
 msgstr "Tìm các bản sao chép dòng trong và ngang qua tập tin"
 
-#: builtin/blame.c:2392
+#: builtin/blame.c:2393
 msgid "Find line movements within and across files"
 msgstr "Tìm các di chuyển dòng trong và ngang qua tập tin"
 
-#: builtin/blame.c:2393
+#: builtin/blame.c:2394
 msgid "n,m"
 msgstr "n,m"
 
-#: builtin/blame.c:2393
+#: builtin/blame.c:2394
 msgid "Process only line range n,m, counting from 1"
 msgstr "Xử lý chỉ dòng vùng n,m, tính từ 1"
 
@@ -2194,8 +2211,8 @@ msgid ""
 "deleting branch '%s' that has been merged to\n"
 "         '%s', but not yet merged to HEAD."
 msgstr ""
-"đang xóa nhánh `%s' mà nó lại đã được hòa trộn vào\n"
-"         `%s', nhưng vẫn chưa được hòa trộn vào HEAD."
+"đang xóa nhánh “%s” mà nó lại đã được hòa trộn vào\n"
+"         “%s”, nhưng vẫn chưa được hòa trộn vào HEAD."
 
 #: builtin/branch.c:149
 #, c-format
@@ -2203,269 +2220,269 @@ msgid ""
 "not deleting branch '%s' that is not yet merged to\n"
 "         '%s', even though it is merged to HEAD."
 msgstr ""
-"không xóa nhánh `%s' cái mà chưa được hòa trộng vào\n"
-"         `%s', cho dù là nó đã được hòa trộn vào HEAD."
+"không xóa nhánh “%s” cái mà chưa được hòa trộn vào\n"
+"         “%s”, cho dù là nó đã được hòa trộn vào HEAD."
+
+#: builtin/branch.c:163
+#, c-format
+msgid "Couldn't look up commit object for '%s'"
+msgstr "Không thể tìm kiếm đối tượng chuyển giao (commit) cho “%s”"
+
+#: builtin/branch.c:167
+#, c-format
+msgid ""
+"The branch '%s' is not fully merged.\n"
+"If you are sure you want to delete it, run 'git branch -D %s'."
+msgstr ""
+"Nhánh “%s” không được trộn một cách đầy đủ.\n"
+"Nếu bạn thực sự muốn xóa nó, thì chạy lệnh “git branch -D %s”."
 
-#: builtin/branch.c:181
+#: builtin/branch.c:180
+msgid "Update of config-file failed"
+msgstr "Cập nhật tập tin cấu hình gặp lỗi"
+
+#: builtin/branch.c:208
 msgid "cannot use -a with -d"
 msgstr "không thể dùng tùy chọn -a với -d"
 
-#: builtin/branch.c:187
+#: builtin/branch.c:214
 msgid "Couldn't look up commit object for HEAD"
 msgstr "Không thể tìm kiếm đối tượng chuyển giao (commit) cho HEAD"
 
-#: builtin/branch.c:192
+#: builtin/branch.c:222
 #, c-format
 msgid "Cannot delete the branch '%s' which you are currently on."
-msgstr "Không thể xóa nhánh `%s' cái mà bạn hiện nay đang ở."
+msgstr "Không thể xóa nhánh “%s” cái mà bạn hiện nay đang ở."
 
-#: builtin/branch.c:203
+#: builtin/branch.c:235
 #, c-format
 msgid "remote branch '%s' not found."
-msgstr "không tìm thấy nhánh máy chủ `%s'."
+msgstr "không tìm thấy nhánh máy chủ “%s”."
 
-#: builtin/branch.c:204
+#: builtin/branch.c:236
 #, c-format
 msgid "branch '%s' not found."
-msgstr "không tìm thấy nhánh `%s'."
-
-#: builtin/branch.c:211
-#, c-format
-msgid "Couldn't look up commit object for '%s'"
-msgstr "Không thể tìm kiếm đối tượng chuyển giao (commit) cho `%s'"
-
-#: builtin/branch.c:217
-#, c-format
-msgid ""
-"The branch '%s' is not fully merged.\n"
-"If you are sure you want to delete it, run 'git branch -D %s'."
-msgstr ""
-"Nhánh `%s' không được trộn một cách đầy đủ.\n"
-"Nếu bạn thực sự muốn xóa nó, thì chạy lệnh `git branch -D %s'."
+msgstr "không tìm thấy nhánh “%s”."
 
-#: builtin/branch.c:226
+#: builtin/branch.c:250
 #, c-format
 msgid "Error deleting remote branch '%s'"
-msgstr "Gặp lỗi khi đang xóa nhánh máy chủ `%s'"
+msgstr "Gặp lỗi khi đang xóa nhánh máy chủ “%s”"
 
-#: builtin/branch.c:227
+#: builtin/branch.c:251
 #, c-format
 msgid "Error deleting branch '%s'"
-msgstr "Lỗi khi xoá bỏ nhánh `%s'"
+msgstr "Lỗi khi xoá bỏ nhánh “%s”"
 
-#: builtin/branch.c:234
+#: builtin/branch.c:258
 #, c-format
 msgid "Deleted remote branch %s (was %s).\n"
 msgstr "Nhánh máy chủ \"%s\" đã bị xóa (từng là %s).\n"
 
-#: builtin/branch.c:235
+#: builtin/branch.c:259
 #, c-format
 msgid "Deleted branch %s (was %s).\n"
-msgstr "Nhánh `%s' đã bị xóa (từng là %s)\n"
+msgstr "Nhánh “%s” đã bị xóa (từng là %s)\n"
 
-#: builtin/branch.c:240
-msgid "Update of config-file failed"
-msgstr "Cập nhật tập tin cấu hình gặp lỗi"
-
-#: builtin/branch.c:338
+#: builtin/branch.c:361
 #, c-format
 msgid "branch '%s' does not point at a commit"
-msgstr "nhánh `%s' không chỉ đến một lần chuyển giao (commit) nào cả"
+msgstr "nhánh “%s” không chỉ đến một lần chuyển giao (commit) nào cả"
 
-#: builtin/branch.c:410
+#: builtin/branch.c:433
 #, c-format
 msgid "[%s: behind %d]"
 msgstr "[%s: đằng sau %d]"
 
-#: builtin/branch.c:412
+#: builtin/branch.c:435
 #, c-format
 msgid "[behind %d]"
 msgstr "[đằng sau %d]"
 
-#: builtin/branch.c:416
+#: builtin/branch.c:439
 #, c-format
 msgid "[%s: ahead %d]"
 msgstr "[%s: phía trước %d]"
 
-#: builtin/branch.c:418
+#: builtin/branch.c:441
 #, c-format
 msgid "[ahead %d]"
 msgstr "[phía trước %d]"
 
-#: builtin/branch.c:421
+#: builtin/branch.c:444
 #, c-format
 msgid "[%s: ahead %d, behind %d]"
 msgstr "[%s: trước %d, sau %d]"
 
-#: builtin/branch.c:424
+#: builtin/branch.c:447
 #, c-format
 msgid "[ahead %d, behind %d]"
 msgstr "[trước %d, sau %d]"
 
-#: builtin/branch.c:537
+#: builtin/branch.c:560
 msgid "(no branch)"
 msgstr "(không nhánh)"
 
-#: builtin/branch.c:602
+#: builtin/branch.c:625
 msgid "some refs could not be read"
 msgstr "một số tham chiếu đã không thể đọc được"
 
-#: builtin/branch.c:615
+#: builtin/branch.c:638
 msgid "cannot rename the current branch while not on any."
 msgstr "không thể đổi tên nhánh hiện hành trong khi nó chẳng ở đâu cả."
 
-#: builtin/branch.c:625
+#: builtin/branch.c:648
 #, c-format
 msgid "Invalid branch name: '%s'"
-msgstr "Sai tên nhánh: `%s'"
+msgstr "Sai tên nhánh: “%s”"
 
-#: builtin/branch.c:640
+#: builtin/branch.c:663
 msgid "Branch rename failed"
 msgstr "Đổi tên nhánh gặp lỗi"
 
-#: builtin/branch.c:644
+#: builtin/branch.c:667
 #, c-format
 msgid "Renamed a misnamed branch '%s' away"
-msgstr "Đã đổi tên nhánh khuyết danh `%s' đi"
+msgstr "Đã đổi tên nhánh khuyết danh “%s” đi"
 
-#: builtin/branch.c:648
+#: builtin/branch.c:671
 #, c-format
 msgid "Branch renamed to %s, but HEAD is not updated!"
 msgstr "Nhánh bị đổi tên thành %s, nhưng HEAD lại không được cập nhật!"
 
-#: builtin/branch.c:655
+#: builtin/branch.c:678
 msgid "Branch is renamed, but update of config-file failed"
 msgstr "Nhánh bị đổi tên, nhưng cập nhật tập tin cấu hình gặp lỗi"
 
-#: builtin/branch.c:670
+#: builtin/branch.c:693
 #, c-format
 msgid "malformed object name %s"
 msgstr "tên đối tượng dị hình %s"
 
-#: builtin/branch.c:694
+#: builtin/branch.c:717
 #, c-format
 msgid "could not write branch description template: %s"
 msgstr "không thể ghi vào mẫu mô tả nhánh: %s"
 
-#: builtin/branch.c:724
+#: builtin/branch.c:747
 msgid "Generic options"
 msgstr "Tùy chọn chung"
 
-#: builtin/branch.c:726
+#: builtin/branch.c:749
 msgid "show hash and subject, give twice for upstream branch"
 msgstr "hiển thị mã băm và chủ đề, đưa ra hai lần cho nhánh thượng nguồn"
 
-#: builtin/branch.c:727
+#: builtin/branch.c:750
 msgid "suppress informational messages"
 msgstr "Thu hồi các thông điệp thông tin"
 
-#: builtin/branch.c:728
+#: builtin/branch.c:751
 msgid "set up tracking mode (see git-pull(1))"
 msgstr "cài đặt chế độ theo vết (xem git-pull(1))"
 
-#: builtin/branch.c:730
+#: builtin/branch.c:753
 msgid "change upstream info"
 msgstr "thay đổi thông tin thượng nguồn (upstream)"
 
-#: builtin/branch.c:734
+#: builtin/branch.c:757
 msgid "use colored output"
 msgstr "sử dụng kết xuất có tô màu"
 
-#: builtin/branch.c:735
+#: builtin/branch.c:758
 msgid "act on remote-tracking branches"
-msgstr "thao tác trên nhánh `remote-tracking'"
+msgstr "thao tác trên nhánh “remote-tracking”"
 
-#: builtin/branch.c:738 builtin/branch.c:744 builtin/branch.c:765
-#: builtin/branch.c:771 builtin/commit.c:1362 builtin/commit.c:1363
-#: builtin/commit.c:1364 builtin/commit.c:1365 builtin/tag.c:470
+#: builtin/branch.c:761 builtin/branch.c:767 builtin/branch.c:788
+#: builtin/branch.c:794 builtin/commit.c:1376 builtin/commit.c:1377
+#: builtin/commit.c:1378 builtin/commit.c:1379 builtin/tag.c:470
 msgid "commit"
 msgstr "commit"
 
-#: builtin/branch.c:739 builtin/branch.c:745
+#: builtin/branch.c:762 builtin/branch.c:768
 msgid "print only branches that contain the commit"
 msgstr "chỉ hiển thị những nhánh mà nó chứa lần chuyển giao"
 
-#: builtin/branch.c:751
+#: builtin/branch.c:774
 msgid "Specific git-branch actions:"
 msgstr "Hành động git-branch:"
 
-#: builtin/branch.c:752
+#: builtin/branch.c:775
 msgid "list both remote-tracking and local branches"
-msgstr "liệt kê cả nhánh `remote-tracking' và nội bộ"
+msgstr "liệt kê cả nhánh “remote-tracking” và nội bộ"
 
-#: builtin/branch.c:754
+#: builtin/branch.c:777
 msgid "delete fully merged branch"
 msgstr "xóa một cách đầy đủ nhánh đã hòa trộn"
 
-#: builtin/branch.c:755
+#: builtin/branch.c:778
 msgid "delete branch (even if not merged)"
 msgstr "xoá nhánh (cho dù là chưa được hòa trộn)"
 
-#: builtin/branch.c:756
+#: builtin/branch.c:779
 msgid "move/rename a branch and its reflog"
 msgstr "di chuyển hay đổi tên một nhánh và reflog của nó"
 
-#: builtin/branch.c:757
+#: builtin/branch.c:780
 msgid "move/rename a branch, even if target exists"
-msgstr "di chuyể hoặc đổi tên một nhánh, thậm  chí cả khi đích đã có sẵn"
+msgstr "di chuyển hoặc đổi tên một nhánh, thậm chí cả khi đích đã có sẵn"
 
-#: builtin/branch.c:758
+#: builtin/branch.c:781
 msgid "list branch names"
 msgstr "liệt kê các tên nhánh"
 
-#: builtin/branch.c:759
+#: builtin/branch.c:782
 msgid "create the branch's reflog"
 msgstr "tạo reflog của nhánh"
 
-#: builtin/branch.c:761
+#: builtin/branch.c:784
 msgid "edit the description for the branch"
 msgstr "sửa mô tả cho nhánh"
 
-#: builtin/branch.c:762
+#: builtin/branch.c:785
 msgid "force creation (when already exists)"
 msgstr "ép buộc tạo (khi đã sẵn tồn tại rồi)"
 
-#: builtin/branch.c:765
+#: builtin/branch.c:788
 msgid "print only not merged branches"
 msgstr "chỉ hiển thị các nhánh chưa được hòa trộn"
 
-#: builtin/branch.c:771
+#: builtin/branch.c:794
 msgid "print only merged branches"
 msgstr "chỉ hiển thị các nhánh được hòa trộn"
 
-#: builtin/branch.c:775
+#: builtin/branch.c:798
 msgid "list branches in columns"
 msgstr "liệt kê các nhánh trong các cột"
 
-#: builtin/branch.c:788
+#: builtin/branch.c:811
 msgid "Failed to resolve HEAD as a valid ref."
 msgstr "Gặp lỗi khi giải quyết HEAD như là một tham chiếu (ref) hợp lệ."
 
-#: builtin/branch.c:793 builtin/clone.c:561
+#: builtin/branch.c:816 builtin/clone.c:561
 msgid "HEAD not found below refs/heads!"
 msgstr "không tìm thấy HEAD ở dưới refs/heads!"
 
-#: builtin/branch.c:813
+#: builtin/branch.c:836
 msgid "--column and --verbose are incompatible"
 msgstr "--column và --verbose xung khắc nhau"
 
-#: builtin/branch.c:864
+#: builtin/branch.c:887
 #, c-format
 msgid "branch '%s' does not exist"
-msgstr "nhánh `%s' chưa sẵn có"
+msgstr "nhánh “%s” chưa sẵn có"
 
-#: builtin/branch.c:876
+#: builtin/branch.c:899
 #, c-format
 msgid "Branch '%s' has no upstream information"
-msgstr "Nhánh `%s' không có thông tin thượng nguồn (upstream)"
+msgstr "Nhánh “%s” không có thông tin thượng nguồn (upstream)"
 
-#: builtin/branch.c:891
+#: builtin/branch.c:914
 msgid "-a and -r options to 'git branch' do not make sense with a branch name"
 msgstr ""
-"hai tùy chọn -a và -r áp dụng cho lệnh `git branch' không hợp lý đối với tên "
+"hai tùy chọn -a và -r áp dụng cho lệnh “git branch” không hợp lý đối với tên "
 "nhánh"
 
-#: builtin/branch.c:894
+#: builtin/branch.c:917
 #, c-format
 msgid ""
 "The --set-upstream flag is deprecated and will be removed. Consider using --"
@@ -2474,7 +2491,7 @@ msgstr ""
 "Cờ --set-upstream bị phản đối và sẽ bị xóa bỏ. Nên dùng --track hoặc --set-"
 "upstream-to\n"
 
-#: builtin/branch.c:911
+#: builtin/branch.c:934
 #, c-format
 msgid ""
 "\n"
@@ -2482,15 +2499,15 @@ msgid ""
 "\n"
 msgstr ""
 "\n"
-"Nếu bạn muốn `%s' theo dõi `%s', thực hiện lệnh sau:\n"
+"Nếu bạn muốn “%s” theo dõi “%s”, thực hiện lệnh sau:\n"
 "\n"
 
-#: builtin/branch.c:912
+#: builtin/branch.c:935
 #, c-format
 msgid "    git branch -d %s\n"
 msgstr "    git branch -d %s\n"
 
-#: builtin/branch.c:913
+#: builtin/branch.c:936
 #, c-format
 msgid "    git branch --set-upstream-to %s\n"
 msgstr "    git branch --set-upstream-to %s\n"
@@ -2498,7 +2515,7 @@ msgstr "    git branch --set-upstream-to %s\n"
 #: builtin/bundle.c:47
 #, c-format
 msgid "%s is okay\n"
-msgstr "`%s' tốt\n"
+msgstr "“%s” tốt\n"
 
 #: builtin/bundle.c:56
 msgid "Need a repository to create a bundle."
@@ -2630,49 +2647,49 @@ msgstr "git checkout [các-tùy-chọn] [<nhánh>] -- <tập-tin>..."
 #: builtin/checkout.c:116 builtin/checkout.c:149
 #, c-format
 msgid "path '%s' does not have our version"
-msgstr "đường dẫn `%s' không có các phiên bản của chúng ta"
+msgstr "đường dẫn “%s” không có các phiên bản của chúng ta"
 
 #: builtin/checkout.c:118 builtin/checkout.c:151
 #, c-format
 msgid "path '%s' does not have their version"
-msgstr "đường dẫn `%s' không có các phiên bản của chúng"
+msgstr "đường dẫn “%s” không có các phiên bản của chúng"
 
 #: builtin/checkout.c:134
 #, c-format
 msgid "path '%s' does not have all necessary versions"
-msgstr "đường dẫn `%s' không có tất cả các phiên bản cần thiết"
+msgstr "đường dẫn “%s” không có tất cả các phiên bản cần thiết"
 
 #: builtin/checkout.c:178
 #, c-format
 msgid "path '%s' does not have necessary versions"
-msgstr "đường dẫn `%s' không có các phiên bản cần thiết"
+msgstr "đường dẫn “%s” không có các phiên bản cần thiết"
 
 #: builtin/checkout.c:195
 #, c-format
 msgid "path '%s': cannot merge"
-msgstr "đường dẫn `%s': không thể hòa trộn"
+msgstr "đường dẫn “%s”: không thể hòa trộn"
 
 #: builtin/checkout.c:212
 #, c-format
 msgid "Unable to add merge result for '%s'"
-msgstr "Không thể thêm kết quả hòa trộn cho `%s'"
+msgstr "Không thể thêm kết quả hòa trộn cho “%s”"
 
 #: builtin/checkout.c:236 builtin/checkout.c:239 builtin/checkout.c:242
 #: builtin/checkout.c:245
 #, c-format
 msgid "'%s' cannot be used with updating paths"
-msgstr "`%s' không thể được sử dụng với các đường dẫn cập nhật"
+msgstr "“%s” không thể được sử dụng với các đường dẫn cập nhật"
 
 #: builtin/checkout.c:248 builtin/checkout.c:251
 #, c-format
 msgid "'%s' cannot be used with %s"
-msgstr "`%s' không thể được sử dụng với %s"
+msgstr "“%s” không thể được sử dụng với %s"
 
 #: builtin/checkout.c:254
 #, c-format
 msgid "Cannot update paths and switch to branch '%s' at the same time."
 msgstr ""
-"Không thể cập nhật các đường dẫn và chuyển đến nhánh `%s' cùng một lúc."
+"Không thể cập nhật các đường dẫn và chuyển đến nhánh “%s” cùng một lúc."
 
 #: builtin/checkout.c:265 builtin/checkout.c:426
 msgid "corrupt index file"
@@ -2681,12 +2698,7 @@ msgstr "tập tin ghi bảng mục lục bị hỏng"
 #: builtin/checkout.c:295 builtin/checkout.c:302
 #, c-format
 msgid "path '%s' is unmerged"
-msgstr "đường dẫn `%s' không được hòa trộn"
-
-#: builtin/checkout.c:333 builtin/checkout.c:534 builtin/clone.c:586
-#: builtin/merge.c:811
-msgid "unable to write new index file"
-msgstr "không thể ghi tập tin lưu bảng mục lục mới"
+msgstr "đường dẫn “%s” không được hòa trộn"
 
 #: builtin/checkout.c:448
 msgid "you need to resolve your current index first"
@@ -2695,7 +2707,7 @@ msgstr "bạn cần phải giải quyết bảng mục lục hiện tại của
 #: builtin/checkout.c:569
 #, c-format
 msgid "Can not do reflog for '%s'\n"
-msgstr "Không thể thực hiện reflog cho `%s'\n"
+msgstr "Không thể thực hiện reflog cho “%s”\n"
 
 #: builtin/checkout.c:602
 msgid "HEAD is now at"
@@ -2704,27 +2716,27 @@ msgstr "HEAD hiện giờ tại"
 #: builtin/checkout.c:609
 #, c-format
 msgid "Reset branch '%s'\n"
-msgstr "Đặt lại nhánh `%s'\n"
+msgstr "Đặt lại nhánh “%s”\n"
 
 #: builtin/checkout.c:612
 #, c-format
 msgid "Already on '%s'\n"
-msgstr "Đã sẵn sàng trên `%s'\n"
+msgstr "Đã sẵn sàng trên “%s”\n"
 
 #: builtin/checkout.c:616
 #, c-format
 msgid "Switched to and reset branch '%s'\n"
-msgstr "Đã chuyển tới và reset nhánh `%s'\n"
+msgstr "Đã chuyển tới và reset nhánh “%s”\n"
 
-#: builtin/checkout.c:618
+#: builtin/checkout.c:618 builtin/checkout.c:955
 #, c-format
 msgid "Switched to a new branch '%s'\n"
-msgstr "Đã chuyển đến nhánh mới `%s'\n"
+msgstr "Đã chuyển đến nhánh mới “%s”\n"
 
 #: builtin/checkout.c:620
 #, c-format
 msgid "Switched to branch '%s'\n"
-msgstr "Đã chuyển đến nhánh `%s'\n"
+msgstr "Đã chuyển đến nhánh “%s”\n"
 
 #: builtin/checkout.c:676
 #, c-format
@@ -2797,129 +2809,129 @@ msgstr "tham chiếu sai: %s"
 msgid "reference is not a tree: %s"
 msgstr "tham chiếu không phải là một cây (tree):%s"
 
-#: builtin/checkout.c:961
+#: builtin/checkout.c:964
 msgid "paths cannot be used with switching branches"
 msgstr "các đường dẫn không thể dùng cùng với các nhánh chuyển"
 
-#: builtin/checkout.c:964 builtin/checkout.c:968
+#: builtin/checkout.c:967 builtin/checkout.c:971
 #, c-format
 msgid "'%s' cannot be used with switching branches"
-msgstr "`%s' không thể được sử dụng với các nhánh chuyển"
+msgstr "“%s” không thể được sử dụng với các nhánh chuyển"
 
-#: builtin/checkout.c:972 builtin/checkout.c:975 builtin/checkout.c:980
-#: builtin/checkout.c:983
+#: builtin/checkout.c:975 builtin/checkout.c:978 builtin/checkout.c:983
+#: builtin/checkout.c:986
 #, c-format
 msgid "'%s' cannot be used with '%s'"
-msgstr "`%s' không thể được sử dụng với `%s'"
+msgstr "“%s” không thể được sử dụng với “%s”"
 
-#: builtin/checkout.c:988
+#: builtin/checkout.c:991
 #, c-format
 msgid "Cannot switch branch to a non-commit '%s'"
-msgstr "Không thể chuyển nhánh đến một non-commit `%s'"
+msgstr "Không thể chuyển nhánh đến một non-commit “%s”"
 
-#: builtin/checkout.c:1009 builtin/gc.c:177
+#: builtin/checkout.c:1012 builtin/gc.c:177
 msgid "suppress progress reporting"
 msgstr "chặn các báo cáo tiến trình hoạt động"
 
-#: builtin/checkout.c:1010 builtin/checkout.c:1012 builtin/clone.c:89
+#: builtin/checkout.c:1013 builtin/checkout.c:1015 builtin/clone.c:89
 #: builtin/remote.c:169 builtin/remote.c:171
 msgid "branch"
 msgstr "nhánh"
 
-#: builtin/checkout.c:1011
+#: builtin/checkout.c:1014
 msgid "create and checkout a new branch"
 msgstr "tạo và checkout một nhánh mới"
 
-#: builtin/checkout.c:1013
+#: builtin/checkout.c:1016
 msgid "create/reset and checkout a branch"
 msgstr "create/reset và checkout một nhánh"
 
-#: builtin/checkout.c:1014
+#: builtin/checkout.c:1017
 msgid "create reflog for new branch"
 msgstr "tạo reflog cho nhánh mới"
 
-#: builtin/checkout.c:1015
+#: builtin/checkout.c:1018
 msgid "detach the HEAD at named commit"
 msgstr "rời bỏ HEAD tại lần chuyển giao danh nghĩa"
 
-#: builtin/checkout.c:1016
+#: builtin/checkout.c:1019
 msgid "set upstream info for new branch"
 msgstr "đặt thông tin thượng nguồn (upstream) cho nhánh mới"
 
-#: builtin/checkout.c:1018
+#: builtin/checkout.c:1021
 msgid "new branch"
 msgstr "nhánh mới"
 
-#: builtin/checkout.c:1018
+#: builtin/checkout.c:1021
 msgid "new unparented branch"
 msgstr "nhánh mồ côi mới"
 
-#: builtin/checkout.c:1019
+#: builtin/checkout.c:1022
 msgid "checkout our version for unmerged files"
 msgstr ""
 "lấy ra (checkout) phiên bản của chúng ta cho các tập tin chưa được hòa trộn"
 
-#: builtin/checkout.c:1021
+#: builtin/checkout.c:1024
 msgid "checkout their version for unmerged files"
 msgstr ""
 "lấy ra (checkout) phiên bản của chúng họ cho các tập tin chưa được hòa trộn"
 
-#: builtin/checkout.c:1023
+#: builtin/checkout.c:1026
 msgid "force checkout (throw away local modifications)"
 msgstr "ép buộc lấy ra (checkout) (bỏ đi những thay đổi nội bộ)"
 
-#: builtin/checkout.c:1024
+#: builtin/checkout.c:1027
 msgid "perform a 3-way merge with the new branch"
 msgstr "thực hiện hòa trộn kiểu 3-way với nhánh mới"
 
-#: builtin/checkout.c:1025 builtin/merge.c:215
+#: builtin/checkout.c:1028 builtin/merge.c:215
 msgid "update ignored files (default)"
 msgstr "cập nhật các tập tin bị bỏ qua (mặc định)"
 
-#: builtin/checkout.c:1026 builtin/log.c:1111 parse-options.h:241
+#: builtin/checkout.c:1029 builtin/log.c:1116 parse-options.h:241
 msgid "style"
 msgstr "kiểu"
 
-#: builtin/checkout.c:1027
+#: builtin/checkout.c:1030
 msgid "conflict style (merge or diff3)"
 msgstr "xung đột kiểu (hòa trộn hay diff3)"
 
-#: builtin/checkout.c:1030
+#: builtin/checkout.c:1033
 msgid "second guess 'git checkout no-such-branch'"
-msgstr "gợi ý thứ hai `git checkout không-nhánh-nào-như-vậy'"
+msgstr "gợi ý thứ hai “git checkout không-nhánh-nào-như-vậy”"
 
-#: builtin/checkout.c:1054
+#: builtin/checkout.c:1057
 msgid "-b, -B and --orphan are mutually exclusive"
 msgstr "Tùy chọn -b|-B và --orphan loại từ lẫn nhau"
 
-#: builtin/checkout.c:1071
+#: builtin/checkout.c:1074
 msgid "--track needs a branch name"
 msgstr "--track cần tên một nhánh"
 
-#: builtin/checkout.c:1078
+#: builtin/checkout.c:1081
 msgid "Missing branch name; try -b"
 msgstr "Thiếu tên nhánh; hãy thử -b"
 
-#: builtin/checkout.c:1113
+#: builtin/checkout.c:1116
 msgid "invalid path specification"
 msgstr "đường dẫn đã cho không hợp lệ"
 
-#: builtin/checkout.c:1120
+#: builtin/checkout.c:1123
 #, 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 ""
-"Không thể cập nhật và chuyển thành nhánh `%s' cùng lúc\n"
-"Bạn đã có ý định checkout `%s' cái mà không thể được phân giải như là lần "
+"Không thể cập nhật và chuyển thành nhánh “%s” cùng lúc\n"
+"Bạn đã có ý định checkout “%s” cái mà không thể được phân giải như là lần "
 "chuyển giao (commit)?"
 
-#: builtin/checkout.c:1125
+#: builtin/checkout.c:1128
 #, c-format
 msgid "git checkout: --detach does not take a path argument '%s'"
-msgstr "git checkout: --detach không nhận một đối số đường dẫn `%s'"
+msgstr "git checkout: --detach không nhận một đối số đường dẫn “%s”"
 
-#: builtin/checkout.c:1129
+#: builtin/checkout.c:1132
 msgid ""
 "git checkout: --ours/--theirs, --force and --merge are incompatible when\n"
 "checking out of the index."
@@ -2943,8 +2955,8 @@ msgstr "ép buộc"
 msgid "remove whole directories"
 msgstr "gỡ bỏ toàn bộ thư mục"
 
-#: builtin/clean.c:56 builtin/describe.c:413 builtin/grep.c:803
-#: builtin/ls-files.c:491 builtin/name-rev.c:231 builtin/show-ref.c:199
+#: builtin/clean.c:56 builtin/describe.c:413 builtin/grep.c:717
+#: builtin/ls-files.c:491 builtin/name-rev.c:231 builtin/show-ref.c:182
 msgid "pattern"
 msgstr "mẫu"
 
@@ -3059,7 +3071,7 @@ msgstr "tên"
 
 #: builtin/clone.c:88
 msgid "use <name> instead of 'origin' to track upstream"
-msgstr "dùng <tên> thay vì `origin' để theo dõi thượng nguồn (uptream)"
+msgstr "dùng <tên> thay vì “origin” để theo dõi thượng nguồn (uptream)"
 
 #: builtin/clone.c:90
 msgid "checkout <branch> instead of the remote's HEAD"
@@ -3069,7 +3081,7 @@ msgstr "lấy ra nhánh (checkout <nhánh>) thay vì HEAD của máy chủ"
 msgid "path to git-upload-pack on the remote"
 msgstr "đường dẫn đến git-upload-pack trên máy chủ"
 
-#: builtin/clone.c:93 builtin/fetch.c:83 builtin/grep.c:748
+#: builtin/clone.c:93 builtin/fetch.c:83 builtin/grep.c:662
 msgid "depth"
 msgstr "độ sâu"
 
@@ -3100,7 +3112,7 @@ msgstr "đặt cấu hình bên trong một kho chứa mới"
 #: builtin/clone.c:243
 #, c-format
 msgid "reference repository '%s' is not a local directory."
-msgstr "kho tham chiếu `%s' không phải là một thư mục nội bộ."
+msgstr "kho tham chiếu “%s” không phải là một thư mục nội bộ."
 
 #: builtin/clone.c:306
 #, c-format
@@ -3110,7 +3122,7 @@ msgstr "tạo thư mục \"%s\" gặp lỗi"
 #: builtin/clone.c:308 builtin/diff.c:77
 #, c-format
 msgid "failed to stat '%s'"
-msgstr "gặp lỗi stat (lấy trạng thái về) `%s'"
+msgstr "gặp lỗi stat (lấy trạng thái về) “%s”"
 
 #: builtin/clone.c:310
 #, c-format
@@ -3130,7 +3142,7 @@ msgstr "gặp lỗi khi tạo được liên kết mềm %s"
 #: builtin/clone.c:350
 #, c-format
 msgid "failed to copy file to '%s'"
-msgstr "gặp lỗi khi chép tập tin tới `%s'"
+msgstr "gặp lỗi khi chép tập tin tới “%s”"
 
 #: builtin/clone.c:373
 #, c-format
@@ -3162,7 +3174,7 @@ msgstr "tùy chọn --bare và --origin %s xung khắc nhau."
 #: builtin/clone.c:719
 #, c-format
 msgid "repository '%s' does not exist"
-msgstr "kho chứa `%s' chưa tồn tại"
+msgstr "kho chứa “%s” chưa tồn tại"
 
 #: builtin/clone.c:724
 msgid "--depth is ignored in local clones; use file:// instead."
@@ -3171,32 +3183,32 @@ msgstr "--depth bị lờ đi khi nhân bản nội bộ; hãy sử dụng file:
 #: builtin/clone.c:734
 #, c-format
 msgid "destination path '%s' already exists and is not an empty directory."
-msgstr "đường dẫn đích `%s' đã có từ trước và không phải là một thư mục rỗng."
+msgstr "đường dẫn đích “%s” đã có từ trước và không phải là một thư mục rỗng."
 
 #: builtin/clone.c:744
 #, c-format
 msgid "working tree '%s' already exists."
-msgstr "cây làm việc `%s' đã sẵn tồn tại rồi."
+msgstr "cây làm việc “%s” đã sẵn tồn tại rồi."
 
 #: builtin/clone.c:757 builtin/clone.c:771
 #, c-format
 msgid "could not create leading directories of '%s'"
-msgstr "không thể tạo các thư mục dẫn đầu của `%s'"
+msgstr "không thể tạo các thư mục dẫn đầu của “%s”"
 
 #: builtin/clone.c:760
 #, c-format
 msgid "could not create work tree dir '%s'."
-msgstr "không thể tạo cây thư mục làm việc dir `%s'."
+msgstr "không thể tạo cây thư mục làm việc dir “%s”."
 
 #: builtin/clone.c:779
 #, c-format
 msgid "Cloning into bare repository '%s'...\n"
-msgstr "Đang nhân bản thành kho chứa bare `%s'...\n"
+msgstr "Đang nhân bản thành kho chứa bare “%s”...\n"
 
 #: builtin/clone.c:781
 #, c-format
 msgid "Cloning into '%s'...\n"
-msgstr "Đang nhân bản thành `%s'...\n"
+msgstr "Đang nhân bản thành “%s”...\n"
 
 #: builtin/clone.c:823
 #, c-format
@@ -3308,99 +3320,99 @@ msgstr ""
 "\n"
 "    git commit --allow-empty\n"
 "\n"
-"Nếu không, hãy thử dùng `git reset'\n"
+"Nếu không, hãy thử dùng “git reset”\n"
 
-#: builtin/commit.c:257
+#: builtin/commit.c:258
 msgid "failed to unpack HEAD tree object"
 msgstr "gặp lỗi khi tháo dỡ HEAD đối tượng cây"
 
-#: builtin/commit.c:299
+#: builtin/commit.c:300
 msgid "unable to create temporary index"
 msgstr "không thể tạo bảng mục lục tạm thời"
 
-#: builtin/commit.c:305
+#: builtin/commit.c:306
 msgid "interactive add failed"
 msgstr "việc thêm tương tác gặp lỗi"
 
-#: builtin/commit.c:338 builtin/commit.c:359 builtin/commit.c:409
+#: builtin/commit.c:339 builtin/commit.c:360 builtin/commit.c:410
 msgid "unable to write new_index file"
 msgstr "không thể ghi tập tin lưu bảng mục lục mới (new_index)"
 
-#: builtin/commit.c:390
+#: builtin/commit.c:391
 msgid "cannot do a partial commit during a merge."
 msgstr ""
 "không thể thực hiện việc chuyển giao (commit) cục bộ trong khi đang được hòa "
 "trộn."
 
-#: builtin/commit.c:392
+#: builtin/commit.c:393
 msgid "cannot do a partial commit during a cherry-pick."
 msgstr ""
 "không thể thực hiện việc chuyển giao (commit) bộ phận trong khi đang cherry-"
 "pick."
 
-#: builtin/commit.c:402
+#: builtin/commit.c:403
 msgid "cannot read the index"
 msgstr "không đọc được bảng mục lục"
 
-#: builtin/commit.c:422
+#: builtin/commit.c:423
 msgid "unable to write temporary index file"
 msgstr "không thể ghi tập tin lưu bảng mục lục tạm thời"
 
-#: builtin/commit.c:509 builtin/commit.c:515
+#: builtin/commit.c:511 builtin/commit.c:517
 #, c-format
 msgid "invalid commit: %s"
 msgstr "lần chuyển giao (commit) không hợp lệ: %s"
 
-#: builtin/commit.c:538
+#: builtin/commit.c:540
 msgid "malformed --author parameter"
 msgstr "đối số --author bị dị hình"
 
-#: builtin/commit.c:558
+#: builtin/commit.c:560
 #, c-format
 msgid "Malformed ident string: '%s'"
-msgstr "Chuỗi thụt lề đầu dòng dị hình: `%s'"
+msgstr "Chuỗi thụt lề đầu dòng dị hình: “%s”"
 
-#: builtin/commit.c:596 builtin/commit.c:629 builtin/commit.c:952
+#: builtin/commit.c:598 builtin/commit.c:631 builtin/commit.c:954
 #, c-format
 msgid "could not lookup commit %s"
 msgstr "không thể tìm kiếm commit (lần chuyển giao) %s"
 
-#: builtin/commit.c:608 builtin/shortlog.c:296
+#: builtin/commit.c:610 builtin/shortlog.c:296
 #, c-format
 msgid "(reading log message from standard input)\n"
 msgstr "(đang đọc thông điệp nhật ký từ đầu vào tiêu chuẩn)\n"
 
-#: builtin/commit.c:610
+#: builtin/commit.c:612
 msgid "could not read log from standard input"
 msgstr "không thể đọc nhật ký từ đầu vào tiêu chuẩn"
 
-#: builtin/commit.c:614
+#: builtin/commit.c:616
 #, c-format
 msgid "could not read log file '%s'"
-msgstr "không đọc được tệp nhật ký `%s'"
+msgstr "không đọc được tệp nhật ký “%s”"
 
-#: builtin/commit.c:620
+#: builtin/commit.c:622
 msgid "commit has empty message"
 msgstr "lần chuyển giao (commit) có ghi chú trống rỗng"
 
-#: builtin/commit.c:636
+#: builtin/commit.c:638
 msgid "could not read MERGE_MSG"
 msgstr "không thể đọc MERGE_MSG"
 
-#: builtin/commit.c:640
+#: builtin/commit.c:642
 msgid "could not read SQUASH_MSG"
 msgstr "không thể đọc SQUASH_MSG"
 
-#: builtin/commit.c:644
+#: builtin/commit.c:646
 #, c-format
 msgid "could not read '%s'"
-msgstr "Không thể đọc `%s'."
+msgstr "Không thể đọc “%s”."
 
-#: builtin/commit.c:705
+#: builtin/commit.c:707
 msgid "could not write commit template"
 msgstr "không thể ghi mẫu commit"
 
-#: builtin/commit.c:716
+#: builtin/commit.c:718
 #, c-format
 msgid ""
 "\n"
@@ -3415,7 +3427,7 @@ msgstr ""
 "\t%s\n"
 "và thử lại.\n"
 
-#: builtin/commit.c:721
+#: builtin/commit.c:723
 #, c-format
 msgid ""
 "\n"
@@ -3430,17 +3442,17 @@ msgstr ""
 "\t%s\n"
 "và thử lại.\n"
 
-#: builtin/commit.c:733
+#: builtin/commit.c:735
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
 "with '#' will be ignored, and an empty message aborts the commit.\n"
 msgstr ""
 "Hãy nhập vào các thông tin để giải thích các thay đổi của bạn. Những dòng "
 "được\n"
-"bắt đầu bằng `#' sẽ được bỏ qua, phần chú thích này nếu rỗng sẽ làm hủy bỏ "
+"bắt đầu bằng “#” sẽ được bỏ qua, phần chú thích này nếu rỗng sẽ làm hủy bỏ "
 "lần chuyển giao (commit).\n"
 
-#: builtin/commit.c:738
+#: builtin/commit.c:740
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
 "with '#' will be kept; you may remove them yourself if you want to.\n"
@@ -3448,143 +3460,151 @@ msgid ""
 msgstr ""
 "Hãy nhập vào các thông tin để giải thích các thay đổi của bạn.Những dòng "
 "được\n"
-"bắt đầu bằng `#' sẽ được bỏ qua; bạn có thể xóa chúng đi nếu muốn.\n"
+"bắt đầu bằng “#” sẽ được bỏ qua; bạn có thể xóa chúng đi nếu muốn.\n"
 "Phần chú thích này nếu rỗng sẽ làm hủy bỏ lần chuyển giao (commit).\n"
 
-#: builtin/commit.c:751
+#: builtin/commit.c:753
 #, c-format
 msgid "%sAuthor:    %s"
 msgstr "%sTác giả:    %s"
 
-#: builtin/commit.c:758
+#: builtin/commit.c:760
 #, c-format
 msgid "%sCommitter: %s"
 msgstr "%sNgười chuyển giao (commit): %s"
 
-#: builtin/commit.c:778
+#: builtin/commit.c:780
 msgid "Cannot read index"
 msgstr "không đọc được bảng mục lục"
 
-#: builtin/commit.c:815
+#: builtin/commit.c:817
 msgid "Error building trees"
 msgstr "Gặp lỗi khi xây dựng cây"
 
-#: builtin/commit.c:830 builtin/tag.c:361
+#: builtin/commit.c:832 builtin/tag.c:361
 #, c-format
 msgid "Please supply the message using either -m or -F option.\n"
 msgstr "Xin hãy áp dụng thông điệp sử dụng hoặc là tùy chọn -m hoặc là -F.\n"
 
-#: builtin/commit.c:927
+#: builtin/commit.c:929
 #, c-format
 msgid "No existing author found with '%s'"
-msgstr "Không tìm thấy tác giả có sẵn với `%s'"
+msgstr "Không tìm thấy tác giả có sẵn với “%s”"
 
-#: builtin/commit.c:942 builtin/commit.c:1142
+#: builtin/commit.c:944 builtin/commit.c:1148
 #, c-format
 msgid "Invalid untracked files mode '%s'"
-msgstr "Chế độ cho các tập tin không bị theo vết không hợp lệ `%s'"
+msgstr "Chế độ cho các tập tin không bị theo vết không hợp lệ “%s”"
 
-#: builtin/commit.c:982
+#: builtin/commit.c:984
 msgid "Using both --reset-author and --author does not make sense"
 msgstr "Sử dụng cả hai tùy chọn --reset-author và --author không hợp lý"
 
-#: builtin/commit.c:993
+#: builtin/commit.c:995
 msgid "You have nothing to amend."
 msgstr "Không có gì để amend (tu bổ) cả."
 
-#: builtin/commit.c:996
+#: builtin/commit.c:998
 msgid "You are in the middle of a merge -- cannot amend."
 msgstr ""
 "Bạn đang ở giữa của quá trình hòa trộn -- không thể thực hiện amend (tu bổ)."
 
-#: builtin/commit.c:998
+#: builtin/commit.c:1000
 msgid "You are in the middle of a cherry-pick -- cannot amend."
 msgstr ""
 "Bạn đang ở giữa của quá trình cherry-pick -- không thể thực hiện amend (tu "
 "bổ)."
 
-#: builtin/commit.c:1001
+#: builtin/commit.c:1003
 msgid "Options --squash and --fixup cannot be used together"
 msgstr "Các tùy chọn --squash và --fixup không thể sử dụng cùng với nhau"
 
-#: builtin/commit.c:1011
+#: builtin/commit.c:1013
 msgid "Only one of -c/-C/-F/--fixup can be used."
 msgstr "Chỉ một tùy chọn trong số -c/-C/-F/--fixup được sử dụng"
 
-#: builtin/commit.c:1013
+#: builtin/commit.c:1015
 msgid "Option -m cannot be combined with -c/-C/-F/--fixup."
 msgstr "Tùy chọn -m không thể được tổ hợp cùng với -c/-C/-F/--fixup."
 
-#: builtin/commit.c:1021
+#: builtin/commit.c:1023
 msgid "--reset-author can be used only with -C, -c or --amend."
 msgstr ""
 "--reset-author chỉ có thể được sử dụng với tùy chọn -C, -c hay --amend."
 
-#: builtin/commit.c:1038
+#: builtin/commit.c:1040
 msgid "Only one of --include/--only/--all/--interactive/--patch can be used."
 msgstr ""
 "Chỉ một trong các tùy chọn --include/--only/--all/--interactive/--patch được "
 "sử dụng."
 
-#: builtin/commit.c:1040
+#: builtin/commit.c:1042
 msgid "No paths with --include/--only does not make sense."
 msgstr "Không đường dẫn với các tùy chọn --include/--only không hợp lý."
 
-#: builtin/commit.c:1042
+#: builtin/commit.c:1044
 msgid "Clever... amending the last one with dirty index."
 msgstr "Giỏi...  tu bổ cái cuối với bảng mục lục phi nghĩa."
 
-#: builtin/commit.c:1044
+#: builtin/commit.c:1046
 msgid "Explicit paths specified without -i nor -o; assuming --only paths..."
 msgstr ""
 "Những đường dẫn rõ ràng được chỉ ra không có tùy chọn -i cũng không -o; đang "
 "giả định --only những-đường-dẫn..."
 
-#: builtin/commit.c:1054 builtin/tag.c:577
+#: builtin/commit.c:1056 builtin/tag.c:577
 #, c-format
 msgid "Invalid cleanup mode %s"
 msgstr "Chế độ dọn dẹp không hợp lệ %s"
 
-#: builtin/commit.c:1059
+#: builtin/commit.c:1061
 msgid "Paths with -a does not make sense."
 msgstr "Các đường dẫn với tùy chọn -a không hợp lý."
 
-#: builtin/commit.c:1156 builtin/commit.c:1384
+#: builtin/commit.c:1067 builtin/commit.c:1202
+msgid "--long and -z are incompatible"
+msgstr "hai tùy chọn -long và -z không tương thích với nhau"
+
+#: builtin/commit.c:1162 builtin/commit.c:1398
 msgid "show status concisely"
 msgstr "hiển thị trạng thái ở dạng súc tích"
 
-#: builtin/commit.c:1158 builtin/commit.c:1386
+#: builtin/commit.c:1164 builtin/commit.c:1400
 msgid "show branch information"
 msgstr "hiển thị thông tin nhánh"
 
-#: builtin/commit.c:1160 builtin/commit.c:1388 builtin/push.c:389
+#: builtin/commit.c:1166 builtin/commit.c:1402 builtin/push.c:389
 msgid "machine-readable output"
 msgstr "kết xuất dạng máy-có-thể-đọc"
 
-#: builtin/commit.c:1163 builtin/commit.c:1390
+#: builtin/commit.c:1169 builtin/commit.c:1404
+msgid "show status in long format (default)"
+msgstr "hiển thị trạng thái ở định dạng dài (mặc định)"
+
+#: builtin/commit.c:1172 builtin/commit.c:1407
 msgid "terminate entries with NUL"
 msgstr "chấm dứt các mục bằng NUL"
 
-#: builtin/commit.c:1165 builtin/commit.c:1393 builtin/fast-export.c:636
+#: builtin/commit.c:1174 builtin/commit.c:1410 builtin/fast-export.c:636
 #: builtin/fast-export.c:639 builtin/tag.c:461
 msgid "mode"
 msgstr "chế độ"
 
-#: builtin/commit.c:1166 builtin/commit.c:1393
+#: builtin/commit.c:1175 builtin/commit.c:1410
 msgid "show untracked files, optional modes: all, normal, no. (Default: all)"
 msgstr ""
 "hiển thị các tập tin chưa được theo dõi  dấu vết, các chế độ tùy chọn:  all, "
 "normal, no. (Mặc định: all)"
 
-#: builtin/commit.c:1169
+#: builtin/commit.c:1178
 msgid "show ignored files"
 msgstr "hiển thị các tập tin ẩn"
 
-#: builtin/commit.c:1170 parse-options.h:151
+#: builtin/commit.c:1179 parse-options.h:151
 msgid "when"
 msgstr "khi"
 
-#: builtin/commit.c:1171
+#: builtin/commit.c:1180
 msgid ""
 "ignore changes to submodules, optional when: all, dirty, untracked. "
 "(Default: all)"
@@ -3592,223 +3612,223 @@ msgstr ""
 "bỏ qua các thay đổi trong mô-đun con, tùy chọn khi: all, dirty, untracked. "
 "(Mặc định: all)"
 
-#: builtin/commit.c:1173
+#: builtin/commit.c:1182
 msgid "list untracked files in columns"
 msgstr "hiển thị danh sách các tập-tin chưa được theo dõi trong các cột"
 
-#: builtin/commit.c:1242
+#: builtin/commit.c:1256
 msgid "couldn't look up newly created commit"
 msgstr "không thể tìm thấy lần chuyển giao (commit) mới hơn đã được tạo"
 
-#: builtin/commit.c:1244
+#: builtin/commit.c:1258
 msgid "could not parse newly created commit"
 msgstr ""
 "không thể phân tích cú pháp của đối tượng chuyển giao mới hơn đã được tạo"
 
-#: builtin/commit.c:1285
+#: builtin/commit.c:1299
 msgid "detached HEAD"
 msgstr "đã rời khỏi HEAD"
 
-#: builtin/commit.c:1287
+#: builtin/commit.c:1301
 msgid " (root-commit)"
 msgstr " (root-commit)"
 
-#: builtin/commit.c:1354
+#: builtin/commit.c:1368
 msgid "suppress summary after successful commit"
 msgstr "không hiển thị tổng kết sau khi chuyển giao thành công"
 
-#: builtin/commit.c:1355
+#: builtin/commit.c:1369
 msgid "show diff in commit message template"
 msgstr "hiển thị sự khác biệt trong mẫu tin nhắn chuyển giao"
 
-#: builtin/commit.c:1357
+#: builtin/commit.c:1371
 msgid "Commit message options"
 msgstr "Các tùy chọn ghi chú commit"
 
-#: builtin/commit.c:1358 builtin/tag.c:459
+#: builtin/commit.c:1372 builtin/tag.c:459
 msgid "read message from file"
 msgstr "đọc chú thích từ tập tin"
 
-#: builtin/commit.c:1359
+#: builtin/commit.c:1373
 msgid "author"
 msgstr "tác giả"
 
-#: builtin/commit.c:1359
+#: builtin/commit.c:1373
 msgid "override author for commit"
 msgstr "ghi đè tác giả cho commit"
 
-#: builtin/commit.c:1360 builtin/gc.c:178
+#: builtin/commit.c:1374 builtin/gc.c:178
 msgid "date"
 msgstr "ngày tháng"
 
-#: builtin/commit.c:1360
+#: builtin/commit.c:1374
 msgid "override date for commit"
 msgstr "ghi đè ngày tháng cho commit"
 
-#: builtin/commit.c:1361 builtin/merge.c:206 builtin/notes.c:537
+#: builtin/commit.c:1375 builtin/merge.c:206 builtin/notes.c:537
 #: builtin/notes.c:694 builtin/tag.c:457
 msgid "message"
 msgstr "thông điệp"
 
-#: builtin/commit.c:1361
+#: builtin/commit.c:1375
 msgid "commit message"
 msgstr "chú thích của lần commit"
 
-#: builtin/commit.c:1362
+#: builtin/commit.c:1376
 msgid "reuse and edit message from specified commit"
 msgstr ""
 "dùng lại các ghi chú từ lần chuyển giao (commit) đã cho nhưng có cho sửa chữa"
 
-#: builtin/commit.c:1363
+#: builtin/commit.c:1377
 msgid "reuse message from specified commit"
 msgstr "dùng lại các ghi chú từ lần chuyển giao (commit) đã cho"
 
-#: builtin/commit.c:1364
+#: builtin/commit.c:1378
 msgid "use autosquash formatted message to fixup specified commit"
 msgstr ""
 "dùng ghi chú có định dạng autosquash để sửa chữa lần chuyển giao đã chỉ ra"
 
-#: builtin/commit.c:1365
+#: builtin/commit.c:1379
 msgid "use autosquash formatted message to squash specified commit"
 msgstr ""
 "dùng lời nhắn có định dạng tự động nén để nén lại các lần chuyển giao đã chỉ "
 "ra"
 
-#: builtin/commit.c:1366
+#: builtin/commit.c:1380
 msgid "the commit is authored by me now (used with -C/-c/--amend)"
 msgstr ""
 "lần chuyển giao nhận tôi là tác giả (được dùng với tùy chọn -C/-c/--amend)"
 
-#: builtin/commit.c:1367 builtin/log.c:1068 builtin/revert.c:109
+#: builtin/commit.c:1381 builtin/log.c:1073 builtin/revert.c:109
 msgid "add Signed-off-by:"
 msgstr "thêm dòng Signed-off-by:"
 
-#: builtin/commit.c:1368
+#: builtin/commit.c:1382
 msgid "use specified template file"
 msgstr "sử dụng tập tin mẫu đã cho"
 
-#: builtin/commit.c:1369
+#: builtin/commit.c:1383
 msgid "force edit of commit"
 msgstr "ép buộc sửa lần commit"
 
-#: builtin/commit.c:1370
+#: builtin/commit.c:1384
 msgid "default"
 msgstr "mặc định"
 
-#: builtin/commit.c:1370 builtin/tag.c:462
+#: builtin/commit.c:1384 builtin/tag.c:462
 msgid "how to strip spaces and #comments from message"
 msgstr "làm thế nào để cắt bỏ khoảng trắng và #ghichú từ mẩu tin nhắn"
 
-#: builtin/commit.c:1371
+#: builtin/commit.c:1385
 msgid "include status in commit message template"
 msgstr "bao gồm các trạng thái ghi mẫu ghi chú chuyển giao (commit)"
 
-#: builtin/commit.c:1372 builtin/merge.c:213 builtin/tag.c:463
+#: builtin/commit.c:1386 builtin/merge.c:213 builtin/tag.c:463
 msgid "key id"
 msgstr "id khóa"
 
-#: builtin/commit.c:1373 builtin/merge.c:214
+#: builtin/commit.c:1387 builtin/merge.c:214
 msgid "GPG sign commit"
 msgstr "ký lần commit dùng GPG"
 
 #. end commit message options
-#: builtin/commit.c:1376
+#: builtin/commit.c:1390
 msgid "Commit contents options"
 msgstr "Các tùy nội dung ghi chú commit"
 
-#: builtin/commit.c:1377
+#: builtin/commit.c:1391
 msgid "commit all changed files"
 msgstr "chuyển giao tất cả các tập tin có thay đổi"
 
-#: builtin/commit.c:1378
+#: builtin/commit.c:1392
 msgid "add specified files to index for commit"
 msgstr "thêm các tập tin đã chỉ ra vào bảng mục lục để chuyển giao (commit)"
 
-#: builtin/commit.c:1379
+#: builtin/commit.c:1393
 msgid "interactively add files"
 msgstr "thêm các tập-tin bằng tương tác"
 
-#: builtin/commit.c:1380
+#: builtin/commit.c:1394
 msgid "interactively add changes"
 msgstr "thêm các thay đổi bằng tương tác"
 
-#: builtin/commit.c:1381
+#: builtin/commit.c:1395
 msgid "commit only specified files"
 msgstr "chỉ chuyển giao các tập tin đã chỉ ra"
 
-#: builtin/commit.c:1382
+#: builtin/commit.c:1396
 msgid "bypass pre-commit hook"
 msgstr "vòng qua móc (hook) pre-commit"
 
-#: builtin/commit.c:1383
+#: builtin/commit.c:1397
 msgid "show what would be committed"
 msgstr "hiển thị xem cái gì có thể được chuyển giao"
 
-#: builtin/commit.c:1391
+#: builtin/commit.c:1408
 msgid "amend previous commit"
 msgstr "tu bổ (amend) lần commit trước"
 
-#: builtin/commit.c:1392
+#: builtin/commit.c:1409
 msgid "bypass post-rewrite hook"
 msgstr "vòng qua móc (hook) post-rewrite"
 
-#: builtin/commit.c:1397
+#: builtin/commit.c:1414
 msgid "ok to record an empty change"
 msgstr "ok để ghi lại một thay đổi trống rỗng"
 
-#: builtin/commit.c:1400
+#: builtin/commit.c:1417
 msgid "ok to record a change with an empty message"
 msgstr "ok để ghi các thay đổi với lời nhắn trống rỗng"
 
-#: builtin/commit.c:1432
+#: builtin/commit.c:1449
 msgid "could not parse HEAD commit"
 msgstr "không thể phân tích commit (lần chuyển giao) HEAD"
 
-#: builtin/commit.c:1470 builtin/merge.c:508
+#: builtin/commit.c:1487 builtin/merge.c:508
 #, c-format
 msgid "could not open '%s' for reading"
-msgstr "không thể mở `%s' để đọc"
+msgstr "không thể mở “%s” để đọc"
 
-#: builtin/commit.c:1477
+#: builtin/commit.c:1494
 #, c-format
 msgid "Corrupt MERGE_HEAD file (%s)"
 msgstr "Tập tin MERGE_HEAD sai hỏng (%s)"
 
-#: builtin/commit.c:1484
+#: builtin/commit.c:1501
 msgid "could not read MERGE_MODE"
 msgstr "không thể đọc MERGE_MODE"
 
-#: builtin/commit.c:1503
+#: builtin/commit.c:1520
 #, c-format
 msgid "could not read commit message: %s"
 msgstr "không thể đọc thông điệp (message) commit (lần chuyển giao): %s"
 
-#: builtin/commit.c:1517
+#: builtin/commit.c:1534
 #, c-format
 msgid "Aborting commit; you did not edit the message.\n"
 msgstr ""
 "Đang bỏ qua việc chuyển giao (commit); bạn đã không biên soạn thông điệp "
 "(message).\n"
 
-#: builtin/commit.c:1522
+#: builtin/commit.c:1539
 #, c-format
 msgid "Aborting commit due to empty commit message.\n"
 msgstr ""
 "Đang bỏ qua lần chuyển giao (commit) bởi vì thông điệp của nó trống rỗng.\n"
 
-#: builtin/commit.c:1537 builtin/merge.c:935 builtin/merge.c:960
+#: builtin/commit.c:1554 builtin/merge.c:832 builtin/merge.c:857
 msgid "failed to write commit object"
 msgstr "gặp lỗi khi ghi đối tượng chuyển giao (commit)"
 
-#: builtin/commit.c:1558
+#: builtin/commit.c:1575
 msgid "cannot lock HEAD ref"
 msgstr "không thể khóa HEAD ref (tham chiếu)"
 
-#: builtin/commit.c:1562
+#: builtin/commit.c:1579
 msgid "cannot update HEAD ref"
 msgstr "không thể cập nhật ref (tham chiếu) HEAD"
 
-#: builtin/commit.c:1573
+#: builtin/commit.c:1590
 msgid ""
 "Repository has been updated, but unable to write\n"
 "new_index file. Check that disk is not full or quota is\n"
@@ -3823,115 +3843,115 @@ msgstr ""
 msgid "git config [options]"
 msgstr "git config [các-tùy-chọn]"
 
-#: builtin/config.c:52
+#: builtin/config.c:51
 msgid "Config file location"
 msgstr "Vị trí tập tin cấu hình"
 
-#: builtin/config.c:53
+#: builtin/config.c:52
 msgid "use global config file"
 msgstr "đặt tập tin cấu hình cần toàn cục"
 
-#: builtin/config.c:54
+#: builtin/config.c:53
 msgid "use system config file"
 msgstr "sử dụng tập tin cấu hình hệ thống"
 
-#: builtin/config.c:55
+#: builtin/config.c:54
 msgid "use repository config file"
 msgstr "dùng tập tin cấu hình của kho"
 
-#: builtin/config.c:56
+#: builtin/config.c:55
 msgid "use given config file"
 msgstr "sử dụng tập tin cấu hình đã cho"
 
-#: builtin/config.c:57
+#: builtin/config.c:56
 msgid "Action"
 msgstr "Hành động"
 
-#: builtin/config.c:58
+#: builtin/config.c:57
 msgid "get value: name [value-regex]"
 msgstr "lấy giá-trị: tên [value-regex]"
 
-#: builtin/config.c:59
+#: builtin/config.c:58
 msgid "get all values: key [value-regex]"
 msgstr "lấy tất cả giá-trị: khóa [value-regex]"
 
-#: builtin/config.c:60
+#: builtin/config.c:59
 msgid "get values for regexp: name-regex [value-regex]"
 msgstr "lấy giá trị cho regexp: name-regex [value-regex]"
 
-#: builtin/config.c:61
+#: builtin/config.c:60
 msgid "replace all matching variables: name value [value_regex]"
 msgstr "thay thế tất cả các biến khớp mẫu: tên giá-trị [value_regex]"
 
-#: builtin/config.c:62
+#: builtin/config.c:61
 msgid "add a new variable: name value"
 msgstr "thêm biến mới: tên giá-trị"
 
-#: builtin/config.c:63
+#: builtin/config.c:62
 msgid "remove a variable: name [value-regex]"
 msgstr "gỡ bỏ biến: tên [value-regex]"
 
-#: builtin/config.c:64
+#: builtin/config.c:63
 msgid "remove all matches: name [value-regex]"
 msgstr "gỡ bỏ mọi cái khớp: tên [value-regex]"
 
-#: builtin/config.c:65
+#: builtin/config.c:64
 msgid "rename section: old-name new-name"
 msgstr "đổi tên chương: tên-cũ tên-mới"
 
-#: builtin/config.c:66
+#: builtin/config.c:65
 msgid "remove a section: name"
 msgstr "gỡ bỏ chương: tên"
 
-#: builtin/config.c:67
+#: builtin/config.c:66
 msgid "list all"
 msgstr "liệt kê tất"
 
-#: builtin/config.c:68
+#: builtin/config.c:67
 msgid "open an editor"
 msgstr "mở một trình biên soạn"
 
-#: builtin/config.c:69 builtin/config.c:70
+#: builtin/config.c:68 builtin/config.c:69
 msgid "slot"
 msgstr "khe"
 
-#: builtin/config.c:69
+#: builtin/config.c:68
 msgid "find the color configured: [default]"
 msgstr "tìm cấu hình màu sắc: [mặc định]"
 
-#: builtin/config.c:70
+#: builtin/config.c:69
 msgid "find the color setting: [stdout-is-tty]"
 msgstr "tìm các cài đặt về màu sắc: [stdout-là-tty]"
 
-#: builtin/config.c:71
+#: builtin/config.c:70
 msgid "Type"
 msgstr "Kiểu"
 
-#: builtin/config.c:72
+#: builtin/config.c:71
 msgid "value is \"true\" or \"false\""
 msgstr "giá trị là \"true\" hoặc \"false\""
 
-#: builtin/config.c:73
+#: builtin/config.c:72
 msgid "value is decimal number"
 msgstr "giá trị ở dạng số thập phân"
 
-#: builtin/config.c:74
+#: builtin/config.c:73
 msgid "value is --bool or --int"
 msgstr "giá trị là --bool hoặc --int"
 
-#: builtin/config.c:75
+#: builtin/config.c:74
 msgid "value is a path (file or directory name)"
 msgstr "giá trị là đường dẫn (tên tập tin hay thư mục)"
 
-#: builtin/config.c:76
+#: builtin/config.c:75
 msgid "Other"
 msgstr "Khác"
 
-#: builtin/config.c:77
+#: builtin/config.c:76
 msgid "terminate values with NUL byte"
 msgstr "chấm dứt giá trị với byte NUL"
 
-#: builtin/config.c:78
+#: builtin/config.c:77
 msgid "respect include directives on lookup"
 msgstr "tôn trọng kể cà các hướng trong tìm kiếm"
 
@@ -3960,7 +3980,7 @@ msgstr "thẻ được chú giải %s không có tên nhúng"
 #: builtin/describe.c:240
 #, c-format
 msgid "tag '%s' is really '%s' here"
-msgstr "thẻ `%s' đã thực sự ở đây `%s' rồi"
+msgstr "thẻ “%s” đã thực sự ở đây “%s” rồi"
 
 #: builtin/describe.c:267
 #, c-format
@@ -3970,12 +3990,12 @@ msgstr "Không phải tên đối tượng %s hợp lệ"
 #: builtin/describe.c:270
 #, c-format
 msgid "%s is not a valid '%s' object"
-msgstr "%s không phải là một đối tượng `%s' hợp lệ"
+msgstr "%s không phải là một đối tượng “%s” hợp lệ"
 
 #: builtin/describe.c:287
 #, c-format
 msgid "no tag exactly matches '%s'"
-msgstr "không có thẻ nào khớp chính xác với `%s'"
+msgstr "không có thẻ nào khớp chính xác với “%s”"
 
 #: builtin/describe.c:289
 #, c-format
@@ -3993,7 +4013,7 @@ msgid ""
 "No annotated tags can describe '%s'.\n"
 "However, there were unannotated tags: try --tags."
 msgstr ""
-"Không có thẻ được chú giải nào được mô tả là `%s'.\n"
+"Không có thẻ được chú giải nào được mô tả là “%s”.\n"
 "Tuy nhiên, ở đây có những thẻ không được chú giải: hãy thử --tags."
 
 #: builtin/describe.c:357
@@ -4002,7 +4022,7 @@ msgid ""
 "No tags can describe '%s'.\n"
 "Try --always, or create some tags."
 msgstr ""
-"Không có thẻ (tag) có thể mô tả `%s'.\n"
+"Không có thẻ (tag) có thể mô tả “%s”.\n"
 "Hãy thử --always, hoặt tạo một số thẻ."
 
 #: builtin/describe.c:378
@@ -4078,36 +4098,36 @@ msgstr "--dirty là xung khắc với các tùy chọn dành cho chuyển giao (
 #: builtin/diff.c:79
 #, c-format
 msgid "'%s': not a regular file or symlink"
-msgstr "`%s': không phải tập tin bình thường hay liên kết tượng trưng"
+msgstr "“%s”: không phải tập tin bình thường hay liên kết tượng trưng"
 
-#: builtin/diff.c:224
+#: builtin/diff.c:228
 #, c-format
 msgid "invalid option: %s"
 msgstr "tùy chọn sai: %s"
 
-#: builtin/diff.c:301
+#: builtin/diff.c:305
 msgid "Not a git repository"
 msgstr "Không phải là kho git"
 
-#: builtin/diff.c:344
+#: builtin/diff.c:348
 #, c-format
 msgid "invalid object '%s' given."
-msgstr "đối tượng đã cho `%s' không hợp lệ."
+msgstr "đối tượng đã cho “%s” không hợp lệ."
 
-#: builtin/diff.c:349
+#: builtin/diff.c:353
 #, c-format
 msgid "more than %d trees given: '%s'"
-msgstr "đã chỉ ra nhiều hơn %d cây (tree): `%s'"
+msgstr "đã chỉ ra nhiều hơn %d cây (tree): “%s”"
 
-#: builtin/diff.c:359
+#: builtin/diff.c:363
 #, c-format
 msgid "more than two blobs given: '%s'"
-msgstr "đã cho nhiều hơn hai đối tượng blob: `%s'"
+msgstr "đã cho nhiều hơn hai đối tượng blob: “%s”"
 
-#: builtin/diff.c:367
+#: builtin/diff.c:371
 #, c-format
 msgid "unhandled object '%s' given."
-msgstr "đã cho đối tượng không thể nắm giữ `%s'."
+msgstr "đã cho đối tượng không thể nắm giữ “%s”."
 
 #: builtin/fast-export.c:22
 msgid "git fast-export [rev-list-opts]"
@@ -4196,7 +4216,7 @@ msgstr "không lấy (fetch) tất cả các thẻ (--no-tags)"
 #: builtin/fetch.c:73
 msgid "prune remote-tracking branches no longer on remote"
 msgstr ""
-"cắt cụt (prune) các nhánh `remote-tracking' không còn tồn tại trên máy chủ "
+"cắt cụt (prune) các nhánh “remote-tracking” không còn tồn tại trên máy chủ "
 "nữa"
 
 #: builtin/fetch.c:74
@@ -4219,7 +4239,7 @@ msgstr "cho phép cập nhật ref (tham chiếu) HEAD"
 msgid "deepen history of shallow clone"
 msgstr "làm sâu hơn lịch sử của bản sao"
 
-#: builtin/fetch.c:85 builtin/log.c:1083
+#: builtin/fetch.c:85 builtin/log.c:1088
 msgid "dir"
 msgstr "tmục"
 
@@ -4307,7 +4327,7 @@ msgid ""
 " 'git remote prune %s' to remove any old, conflicting branches"
 msgstr ""
 "một số tham chiếu (refs) nội bộ không thể được cập nhật; hãy thử chạy\n"
-" `git remote prune %s' để bỏ đi những nhánh cũ, hay bị xung đột"
+" “git remote prune %s” để bỏ đi những nhánh cũ, hay bị xung đột"
 
 #: builtin/fetch.c:549
 #, c-format
@@ -4393,15 +4413,15 @@ msgid "git fmt-merge-msg [-m <message>] [--log[=<n>]|--no-log] [--file <file>]"
 msgstr ""
 "git fmt-merge-msg [-m <thông điệp>] [--log[=<n>]|--no-log] [--file <tập-tin>]"
 
-#: builtin/fmt-merge-msg.c:653 builtin/fmt-merge-msg.c:656 builtin/grep.c:787
-#: builtin/merge.c:188 builtin/show-branch.c:656 builtin/show-ref.c:192
+#: builtin/fmt-merge-msg.c:653 builtin/fmt-merge-msg.c:656 builtin/grep.c:701
+#: builtin/merge.c:188 builtin/show-branch.c:656 builtin/show-ref.c:175
 #: builtin/tag.c:448 parse-options.h:133 parse-options.h:235
 msgid "n"
 msgstr "n"
 
 #: builtin/fmt-merge-msg.c:654
 msgid "populate log with at most <n> entries from shortlog"
-msgstr "gắn nhật ký với ít nhất <n> mục từ lệnh `shortlog'"
+msgstr "gắn nhật ký với ít nhất <n> mục từ lệnh “shortlog”"
 
 #: builtin/fmt-merge-msg.c:657
 msgid "alias for --log (deprecated)"
@@ -4481,7 +4501,7 @@ msgstr "báo cáo node gốc"
 
 #: builtin/fsck.c:618
 msgid "make index objects head nodes"
-msgstr "tạo ` index objects head nodes'"
+msgstr "tạo “ index objects head nodes”"
 
 #: builtin/fsck.c:619
 msgid "make reflogs head nodes (default)"
@@ -4510,7 +4530,7 @@ msgstr "git gc [các-tùy-chọn]"
 #: builtin/gc.c:63
 #, c-format
 msgid "Invalid %s: '%s'"
-msgstr "%s không hợp lệ: `%s'"
+msgstr "%s không hợp lệ: “%s”"
 
 #: builtin/gc.c:90
 #, c-format
@@ -4543,7 +4563,7 @@ msgstr ""
 msgid ""
 "There are too many unreachable loose objects; run 'git prune' to remove them."
 msgstr ""
-"Có quá nhiều đối tượng tự do không được dùng đến; hãy chạy lệnh `git prune' "
+"Có quá nhiều đối tượng tự do không được dùng đến; hãy chạy lệnh “git prune” "
 "để xóa bỏ chúng đi."
 
 #: builtin/grep.c:22
@@ -4555,228 +4575,228 @@ msgstr "git grep [các-tùy-chọn] [-e] <mẫu> [<rev>...] [[--] <đường-d
 msgid "grep: failed to create thread: %s"
 msgstr "grep: gặp lỗi tạo tuyến (thread): %s"
 
-#: builtin/grep.c:455
+#: builtin/grep.c:365
 #, c-format
 msgid "Failed to chdir: %s"
 msgstr "Gặp lỗi với lệnh chdir: %s"
 
-#: builtin/grep.c:531 builtin/grep.c:565
+#: builtin/grep.c:443 builtin/grep.c:478
 #, c-format
 msgid "unable to read tree (%s)"
 msgstr "không thể đọc cây (%s)"
 
-#: builtin/grep.c:579
+#: builtin/grep.c:493
 #, c-format
 msgid "unable to grep from object of type %s"
 msgstr "không thể thực hiện lệnh grep (lọc tìm) từ đối tượng thuộc kiểu %s"
 
-#: builtin/grep.c:637
+#: builtin/grep.c:551
 #, c-format
 msgid "switch `%c' expects a numerical value"
-msgstr "chuyển đến `%c' mong chờ một giá trị bằng số"
+msgstr "chuyển đến `%c' cần một giá trị bằng số"
 
-#: builtin/grep.c:654
+#: builtin/grep.c:568
 #, c-format
 msgid "cannot open '%s'"
-msgstr "không mở được `%s'"
+msgstr "không mở được “%s”"
 
-#: builtin/grep.c:729
+#: builtin/grep.c:643
 msgid "search in index instead of in the work tree"
 msgstr "tìm trong bảng mục lục thay vì trong cây làm việc"
 
-#: builtin/grep.c:731
+#: builtin/grep.c:645
 msgid "find in contents not managed by git"
 msgstr "tìm trong nội dung không được quản lý bởi git"
 
-#: builtin/grep.c:733
+#: builtin/grep.c:647
 msgid "search in both tracked and untracked files"
 msgstr "tìm kiếm các tập tin được và chưa được theo dõi dấu vết"
 
-#: builtin/grep.c:735
+#: builtin/grep.c:649
 msgid "search also in ignored files"
 msgstr "tìm cả trong các tập tin đã bị lờ đi"
 
-#: builtin/grep.c:738
+#: builtin/grep.c:652
 msgid "show non-matching lines"
 msgstr "hiển thị  những dòng không khớp với mẫu"
 
-#: builtin/grep.c:740
+#: builtin/grep.c:654
 msgid "case insensitive matching"
 msgstr "phân biệt chữ hoa/thường"
 
-#: builtin/grep.c:742
+#: builtin/grep.c:656
 msgid "match patterns only at word boundaries"
 msgstr "chỉ khớp mẫu tại đường ranh giới từ"
 
-#: builtin/grep.c:744
+#: builtin/grep.c:658
 msgid "process binary files as text"
 msgstr "xử lý tập tin nhị phân như là dạng văn bản thường"
 
-#: builtin/grep.c:746
+#: builtin/grep.c:660
 msgid "don't match patterns in binary files"
 msgstr "không khớp mẫu trong các tập tin nhị phân"
 
-#: builtin/grep.c:749
+#: builtin/grep.c:663
 msgid "descend at most <depth> levels"
 msgstr "giảm xuống ít nhất mức <sâu>"
 
-#: builtin/grep.c:753
+#: builtin/grep.c:667
 msgid "use extended POSIX regular expressions"
 msgstr "dùng biểu thức chính qui POSIX có mở rộng"
 
-#: builtin/grep.c:756
+#: builtin/grep.c:670
 msgid "use basic POSIX regular expressions (default)"
 msgstr "sử dụng biểu thức chính quy kiểu POSIX (mặc định)"
 
-#: builtin/grep.c:759
+#: builtin/grep.c:673
 msgid "interpret patterns as fixed strings"
 msgstr "diễn dịch các mẫu như là chuỗi cố định"
 
-#: builtin/grep.c:762
+#: builtin/grep.c:676
 msgid "use Perl-compatible regular expressions"
 msgstr "sử dụng biểu thức chính quy tương thích Perl"
 
-#: builtin/grep.c:765
+#: builtin/grep.c:679
 msgid "show line numbers"
 msgstr "hiển thị số của dòng"
 
-#: builtin/grep.c:766
+#: builtin/grep.c:680
 msgid "don't show filenames"
 msgstr "không hiển thị tên tập tin"
 
-#: builtin/grep.c:767
+#: builtin/grep.c:681
 msgid "show filenames"
 msgstr "hiển thị các tên tập tin"
 
-#: builtin/grep.c:769
+#: builtin/grep.c:683
 msgid "show filenames relative to top directory"
 msgstr "hiển thị tên tập tin tương đối với thư mục đỉnh (top)"
 
-#: builtin/grep.c:771
+#: builtin/grep.c:685
 msgid "show only filenames instead of matching lines"
 msgstr "chỉ hiển thị tên tập tin thay vì những dòng khớp với mẫu"
 
-#: builtin/grep.c:773
+#: builtin/grep.c:687
 msgid "synonym for --files-with-matches"
 msgstr "đồng nghĩa với --files-with-matches"
 
-#: builtin/grep.c:776
+#: builtin/grep.c:690
 msgid "show only the names of files without match"
 msgstr "chỉ hiển thị tên cho những tập tin không khớp với mẫu"
 
-#: builtin/grep.c:778
+#: builtin/grep.c:692
 msgid "print NUL after filenames"
 msgstr "thêm NUL vào sau tên tập tin"
 
-#: builtin/grep.c:780
+#: builtin/grep.c:694
 msgid "show the number of matches instead of matching lines"
 msgstr "hiển thị số lượng khớp thay vì những dòng khớp với mẫu"
 
-#: builtin/grep.c:781
+#: builtin/grep.c:695
 msgid "highlight matches"
 msgstr "tô sáng cái khớp"
 
-#: builtin/grep.c:783
+#: builtin/grep.c:697
 msgid "print empty line between matches from different files"
 msgstr "hiển thị dòng trống giữa các lần khớp từ các tập tin khác biệt"
 
-#: builtin/grep.c:785
+#: builtin/grep.c:699
 msgid "show filename only once above matches from same file"
 msgstr ""
 "hiển thị tên tập tin một lần phía trên các lần khớp từ cùng một tập tin"
 
-#: builtin/grep.c:788
+#: builtin/grep.c:702
 msgid "show <n> context lines before and after matches"
 msgstr "hiển thị <n> dòng nội dung phía trước và sau các lần khớp"
 
-#: builtin/grep.c:791
+#: builtin/grep.c:705
 msgid "show <n> context lines before matches"
 msgstr "hiển thị <n> dòng nội dung trước khớp"
 
-#: builtin/grep.c:793
+#: builtin/grep.c:707
 msgid "show <n> context lines after matches"
 msgstr "hiển thị <n> dòng nội dung sau khớp"
 
-#: builtin/grep.c:794
+#: builtin/grep.c:708
 msgid "shortcut for -C NUM"
 msgstr "Dạng tắt cho -C SỐ"
 
-#: builtin/grep.c:797
+#: builtin/grep.c:711
 msgid "show a line with the function name before matches"
 msgstr "hiển thị dòng vói tên hàm trước các lần khớp"
 
-#: builtin/grep.c:799
+#: builtin/grep.c:713
 msgid "show the surrounding function"
 msgstr "hiển thị hàm bao quanh"
 
-#: builtin/grep.c:802
+#: builtin/grep.c:716
 msgid "read patterns from file"
 msgstr "đọc mẫu từ tập-tin"
 
-#: builtin/grep.c:804
+#: builtin/grep.c:718
 msgid "match <pattern>"
 msgstr "match <mẫu>"
 
-#: builtin/grep.c:806
+#: builtin/grep.c:720
 msgid "combine patterns specified with -e"
 msgstr "tổ hợp mẫu được chỉ ra với tùy chọn -e"
 
-#: builtin/grep.c:818
+#: builtin/grep.c:732
 msgid "indicate hit with exit status without output"
 msgstr "đưa ra gợi ý với trạng thái thoát mà không có kết xuất"
 
-#: builtin/grep.c:820
+#: builtin/grep.c:734
 msgid "show only matches from files that match all patterns"
 msgstr "chỉ hiển thị những cái khớp từ tập tin mà nó khớp toàn bộ các mẫu"
 
-#: builtin/grep.c:822
+#: builtin/grep.c:736
 msgid "show parse tree for grep expression"
-msgstr "hiển thị cây phân tích cú pháp cho biểu thức `grep' (tìm kiếm)"
+msgstr "hiển thị cây phân tích cú pháp cho biểu thức “grep” (tìm kiếm)"
 
-#: builtin/grep.c:826
+#: builtin/grep.c:740
 msgid "pager"
 msgstr "trang giấy"
 
-#: builtin/grep.c:826
+#: builtin/grep.c:740
 msgid "show matching files in the pager"
 msgstr "hiển thị các tập tin khớp trong trang giấy"
 
-#: builtin/grep.c:829
+#: builtin/grep.c:743
 msgid "allow calling of grep(1) (ignored by this build)"
 msgstr "cho phép gọi grep(1) (bị bỏ qua bởi lần dịch này)"
 
-#: builtin/grep.c:830 builtin/show-ref.c:201
+#: builtin/grep.c:744 builtin/show-ref.c:184
 msgid "show usage"
 msgstr "hiển thị cách dùng"
 
-#: builtin/grep.c:921
+#: builtin/grep.c:811
 msgid "no pattern given."
 msgstr "chưa chỉ ra mẫu."
 
-#: builtin/grep.c:935
+#: builtin/grep.c:825
 #, c-format
 msgid "bad object %s"
 msgstr "đối tượng sai %s"
 
-#: builtin/grep.c:976
+#: builtin/grep.c:866
 msgid "--open-files-in-pager only works on the worktree"
 msgstr "--open-files-in-pager chỉ làm việc trên cây-làm-việc"
 
-#: builtin/grep.c:999
+#: builtin/grep.c:889
 msgid "--cached or --untracked cannot be used with --no-index."
 msgstr "--cached hay --untracked không được sử dụng với --no-index."
 
-#: builtin/grep.c:1004
+#: builtin/grep.c:894
 msgid "--no-index or --untracked cannot be used with revs."
 msgstr ""
 "--no-index hay --untracked không được sử dụng cùng với các tùy chọn liên "
 "quan đến revs."
 
-#: builtin/grep.c:1007
+#: builtin/grep.c:897
 msgid "--[no-]exclude-standard cannot be used for tracked contents."
 msgstr "--[no-]exclude-standard không thể sử dụng cho nội dung lưu dấu vết."
 
-#: builtin/grep.c:1015
+#: builtin/grep.c:905
 msgid "both --cached and trees are given."
 msgstr "cả hai --cached và các cây phải được chỉ ra."
 
@@ -4839,7 +4859,7 @@ msgstr "git help [--all] [--man|--web|--info] [lệnh]"
 #: builtin/help.c:65
 #, c-format
 msgid "unrecognized help format '%s'"
-msgstr "không nhận ra định dạng trợ giúp `%s'"
+msgstr "không nhận ra định dạng trợ giúp “%s”"
 
 #: builtin/help.c:93
 msgid "Failed to start emacsclient."
@@ -4852,12 +4872,12 @@ msgstr "Gặp lỗi khi phân tích phiên bản emacsclient."
 #: builtin/help.c:114
 #, c-format
 msgid "emacsclient version '%d' too old (< 22)."
-msgstr "phiên bản của emacsclient `%d' quá cũ (< 22)."
+msgstr "phiên bản của emacsclient “%d” quá cũ (< 22)."
 
 #: builtin/help.c:132 builtin/help.c:160 builtin/help.c:169 builtin/help.c:177
 #, c-format
 msgid "failed to exec '%s': %s"
-msgstr "gặp lỗi khi thực thi `%s': %s"
+msgstr "gặp lỗi khi thực thi “%s”: %s"
 
 #: builtin/help.c:217
 #, c-format
@@ -4865,8 +4885,8 @@ msgid ""
 "'%s': path for unsupported man viewer.\n"
 "Please consider using 'man.<tool>.cmd' instead."
 msgstr ""
-"`%s': đường dẫn không hỗ trợ bộ trình chiếu man.\n"
-"Hãy cân nhắc đến việc sử dụng 'man.<tool>.cmd' để thay thế."
+"“%s”: đường dẫn không hỗ trợ bộ trình chiếu man.\n"
+"Hãy cân nhắc đến việc sử dụng “man.<tool>.cmd” để thay thế."
 
 #: builtin/help.c:229
 #, c-format
@@ -4874,8 +4894,8 @@ msgid ""
 "'%s': cmd for supported man viewer.\n"
 "Please consider using 'man.<tool>.path' instead."
 msgstr ""
-"`%s': cmd (lệnh) hỗ trợ bộ trình chiếu man.\n"
-"Hãy cân nhắc đến việc sử dụng 'man.<tool>.path' để thay thế."
+"“%s”: cmd (lệnh) hỗ trợ bộ trình chiếu man.\n"
+"Hãy cân nhắc đến việc sử dụng “man.<tool>.path” để thay thế."
 
 #: builtin/help.c:299
 msgid "The most commonly used git commands are:"
@@ -4884,7 +4904,7 @@ msgstr "Những lệnh git hay được sử dụng nhất là:"
 #: builtin/help.c:367
 #, c-format
 msgid "'%s': unknown man viewer."
-msgstr "`%s': không rõ chương trình xem man."
+msgstr "“%s”: không rõ chương trình xem man."
 
 #: builtin/help.c:384
 msgid "no man viewer handled the request"
@@ -4939,12 +4959,12 @@ msgstr "pack quá lớn so với định nghĩa hiện tại của kiểu off_t"
 #: builtin/index-pack.c:273
 #, c-format
 msgid "unable to create '%s'"
-msgstr "không thể tạo `%s'"
+msgstr "không thể tạo “%s”"
 
 #: builtin/index-pack.c:278
 #, c-format
 msgid "cannot open packfile '%s'"
-msgstr "không thể mở packfile `%s'"
+msgstr "không thể mở packfile “%s”"
 
 #: builtin/index-pack.c:292
 msgid "pack signature mismatch"
@@ -5104,12 +5124,12 @@ msgstr "gặp lỗi trong khi đóng tập tin pack"
 #: builtin/index-pack.c:1266
 #, c-format
 msgid "cannot write keep file '%s'"
-msgstr "không thể ghi tập tin giữ lại `%s'"
+msgstr "không thể ghi tập tin giữ lại “%s”"
 
 #: builtin/index-pack.c:1274
 #, c-format
 msgid "cannot close written keep file '%s'"
-msgstr "không thể đóng tập tin giữ lại đã được ghi `%s'"
+msgstr "không thể đóng tập tin giữ lại đã được ghi “%s”"
 
 #: builtin/index-pack.c:1287
 msgid "cannot store pack file"
@@ -5137,12 +5157,12 @@ msgstr "không hỗ trợ đa tuyến, bỏ qua %s"
 #: builtin/index-pack.c:1399
 #, c-format
 msgid "Cannot open existing pack file '%s'"
-msgstr "Không thể mở tập tin pack đã sẵn có `%s'"
+msgstr "Không thể mở tập tin pack đã sẵn có “%s”"
 
 #: builtin/index-pack.c:1401
 #, c-format
 msgid "Cannot open existing pack idx file for '%s'"
-msgstr "Không thể mở tập tin 'pack idx' cho `%s'"
+msgstr "Không thể mở tập tin “pack idx” cho “%s”"
 
 #: builtin/index-pack.c:1448
 #, c-format
@@ -5175,7 +5195,7 @@ msgstr "--fix-thin không thể được dùng mà không có --stdin"
 #: builtin/index-pack.c:1563 builtin/index-pack.c:1573
 #, c-format
 msgid "packfile name '%s' does not end with '.pack'"
-msgstr "tên tập tin packfile `%s' không được kết thúc bằng đuôi '.pack'"
+msgstr "tên tập tin packfile “%s” không được kết thúc bằng đuôi “.pack”"
 
 #: builtin/index-pack.c:1582
 msgid "--verify with no packfile name given"
@@ -5194,22 +5214,22 @@ msgstr "tên mẫu dài một cách điên rồ %s"
 #: builtin/init-db.c:67
 #, c-format
 msgid "cannot stat '%s'"
-msgstr "không thể lấy trạng thái (stat) về `%s'"
+msgstr "không thể lấy trạng thái (stat) về “%s”"
 
 #: builtin/init-db.c:73
 #, c-format
 msgid "cannot stat template '%s'"
-msgstr "không thể stat (lấy trạng thái về) mẫu `%s'"
+msgstr "không thể stat (lấy trạng thái về) mẫu “%s”"
 
 #: builtin/init-db.c:80
 #, c-format
 msgid "cannot opendir '%s'"
-msgstr "không thể opendir `%s'"
+msgstr "không thể opendir “%s”"
 
 #: builtin/init-db.c:97
 #, c-format
 msgid "cannot readlink '%s'"
-msgstr "không thể readlink `%s'"
+msgstr "không thể readlink “%s”"
 
 #: builtin/init-db.c:99
 #, c-format
@@ -5219,7 +5239,7 @@ msgstr "liên kết tượng trưng dài một cách điên rồ %s"
 #: builtin/init-db.c:102
 #, c-format
 msgid "cannot symlink '%s' '%s'"
-msgstr "không thể tạo liên kết tượng trưng (symlink) `%s' `%s'"
+msgstr "không thể tạo liên kết tượng trưng (symlink) “%s” “%s”"
 
 #: builtin/init-db.c:106
 #, c-format
@@ -5244,7 +5264,7 @@ msgstr "các mẫu không được tìm thấy %s"
 #: builtin/init-db.c:154
 #, c-format
 msgid "not copying templates of a wrong format version %d from '%s'"
-msgstr "không sao chép các mẫu của phiên bản sai định dạng %d từ `%s'"
+msgstr "không sao chép các mẫu của phiên bản sai định dạng %d từ “%s”"
 
 #: builtin/init-db.c:192
 #, c-format
@@ -5269,7 +5289,7 @@ msgstr "không di chuyển được %s vào %s"
 #: builtin/init-db.c:363
 #, c-format
 msgid "Could not create git link %s"
-msgstr "Không thể tạo liên kết git `%s'"
+msgstr "Không thể tạo liên kết git “%s”"
 
 #.
 #. * TRANSLATORS: The first '%s' is either "Reinitialized
@@ -5343,7 +5363,7 @@ msgstr "Không thể truy cập thư mục làm việc hiện hành"
 #: builtin/init-db.c:586
 #, c-format
 msgid "Cannot access work tree '%s'"
-msgstr "không thể truy cập cây (tree) làm việc `%s'"
+msgstr "không thể truy cập cây (tree) làm việc “%s”"
 
 #: builtin/log.c:37
 msgid "git log [<options>] [<since>..<until>] [[--] <path>...]\n"
@@ -5370,213 +5390,213 @@ msgstr "các tùy chọn trang trí"
 msgid "Final output: %d %s\n"
 msgstr "Kết xuất cuối cùng: %d %s\n"
 
-#: builtin/log.c:403 builtin/log.c:494
+#: builtin/log.c:405 builtin/log.c:497
 #, c-format
 msgid "Could not read object %s"
 msgstr "Không thể đọc đối tượng %s"
 
-#: builtin/log.c:518
+#: builtin/log.c:521
 #, c-format
 msgid "Unknown type: %d"
 msgstr "Không nhận ra kiểu: %d"
 
-#: builtin/log.c:608
+#: builtin/log.c:613
 msgid "format.headers without value"
 msgstr "format.headers không có giá trị cụ thể"
 
-#: builtin/log.c:682
+#: builtin/log.c:687
 msgid "name of output directory is too long"
 msgstr "tên của thư mục kết xuất quá dài"
 
-#: builtin/log.c:693
+#: builtin/log.c:698
 #, c-format
 msgid "Cannot open patch file %s"
 msgstr "Không thể mở tập tin miếng vá: %s"
 
-#: builtin/log.c:707
+#: builtin/log.c:712
 msgid "Need exactly one range."
 msgstr "Cần chính xác một vùng."
 
-#: builtin/log.c:715
+#: builtin/log.c:720
 msgid "Not a range."
 msgstr "Không phải là một vùng."
 
-#: builtin/log.c:789
+#: builtin/log.c:794
 msgid "Cover letter needs email format"
-msgstr "'Cover letter' cần cho định dạng thư"
+msgstr "”Cover letter” cần cho định dạng thư"
 
-#: builtin/log.c:862
+#: builtin/log.c:867
 #, c-format
 msgid "insane in-reply-to: %s"
 msgstr "in-reply-to điên rồ: %s"
 
-#: builtin/log.c:890
+#: builtin/log.c:895
 msgid "git format-patch [options] [<since> | <revision range>]"
 msgstr "git format-patch [các-tùy-chọn] [<kể-từ> | <vùng-xem-xét>]"
 
-#: builtin/log.c:935
+#: builtin/log.c:940
 msgid "Two output directories?"
 msgstr "Hai thư mục kết xuất?"
 
-#: builtin/log.c:1063
+#: builtin/log.c:1068
 msgid "use [PATCH n/m] even with a single patch"
 msgstr "dùng [PATCH n/m] ngay cả với miếng vá đơn"
 
-#: builtin/log.c:1066
+#: builtin/log.c:1071
 msgid "use [PATCH] even with multiple patches"
 msgstr "dùng [VÁ] ngay cả với các miếng vá phức tạp"
 
-#: builtin/log.c:1070
+#: builtin/log.c:1075
 msgid "print patches to standard out"
 msgstr "hiển thị miếng vá ra đầu ra chuẩn"
 
-#: builtin/log.c:1072
+#: builtin/log.c:1077
 msgid "generate a cover letter"
 msgstr "tạo bì thư"
 
-#: builtin/log.c:1074
+#: builtin/log.c:1079
 msgid "use simple number sequence for output file names"
 msgstr "sử dụng chỗi dãy số dạng đơn giản cho tên tập-tin xuất ra"
 
-#: builtin/log.c:1075
+#: builtin/log.c:1080
 msgid "sfx"
 msgstr "sfx"
 
-#: builtin/log.c:1076
+#: builtin/log.c:1081
 msgid "use <sfx> instead of '.patch'"
-msgstr "sử dụng <sfx> thay cho '.patch'"
+msgstr "sử dụng <sfx> thay cho “.patch”"
 
-#: builtin/log.c:1078
+#: builtin/log.c:1083
 msgid "start numbering patches at <n> instead of 1"
 msgstr "bắt đầu đánh số miếng vá từ <n> thay vì 1"
 
-#: builtin/log.c:1080
+#: builtin/log.c:1085
 msgid "Use [<prefix>] instead of [PATCH]"
 msgstr "Dùng [<tiền-tố>] thay cho [VÁ]"
 
-#: builtin/log.c:1083
+#: builtin/log.c:1088
 msgid "store resulting files in <dir>"
 msgstr "lưu các tập tin kết quả trong <t.mục>"
 
-#: builtin/log.c:1086
+#: builtin/log.c:1091
 msgid "don't strip/add [PATCH]"
 msgstr "không strip/add [VÁ]"
 
-#: builtin/log.c:1089
+#: builtin/log.c:1094
 msgid "don't output binary diffs"
 msgstr "không kết xuất diff (những khác biệt) nhị phân"
 
-#: builtin/log.c:1091
+#: builtin/log.c:1096
 msgid "don't include a patch matching a commit upstream"
 msgstr "không bao gồm miếng vá khớp với một lần chuyển giao thượng nguồn"
 
-#: builtin/log.c:1093
+#: builtin/log.c:1098
 msgid "show patch format instead of default (patch + stat)"
 msgstr "hiển thị định dạng miếng vá thay vì mặc định (miếng vá + thống kê)"
 
-#: builtin/log.c:1095
+#: builtin/log.c:1100
 msgid "Messaging"
 msgstr "Lời nhắn"
 
-#: builtin/log.c:1096
+#: builtin/log.c:1101
 msgid "header"
 msgstr "đầu đề thư"
 
-#: builtin/log.c:1097
+#: builtin/log.c:1102
 msgid "add email header"
 msgstr "thêm đầu đề thư"
 
-#: builtin/log.c:1098 builtin/log.c:1100
+#: builtin/log.c:1103 builtin/log.c:1105
 msgid "email"
 msgstr "thư điện tử"
 
-#: builtin/log.c:1098
+#: builtin/log.c:1103
 msgid "add To: header"
 msgstr "thêm To: đầu đề thư"
 
-#: builtin/log.c:1100
+#: builtin/log.c:1105
 msgid "add Cc: header"
 msgstr "thêm Cc: đầu đề thư"
 
-#: builtin/log.c:1102
+#: builtin/log.c:1107
 msgid "message-id"
 msgstr "message-id"
 
-#: builtin/log.c:1103
+#: builtin/log.c:1108
 msgid "make first mail a reply to <message-id>"
 msgstr "dùng thư đầu tiên để trả lời <message-id>"
 
-#: builtin/log.c:1104 builtin/log.c:1107
+#: builtin/log.c:1109 builtin/log.c:1112
 msgid "boundary"
 msgstr "ranh giới"
 
-#: builtin/log.c:1105
+#: builtin/log.c:1110
 msgid "attach the patch"
 msgstr "đính kèm miếng vá"
 
-#: builtin/log.c:1108
+#: builtin/log.c:1113
 msgid "inline the patch"
 msgstr "dùng miếng vá làm nội dung"
 
-#: builtin/log.c:1112
+#: builtin/log.c:1117
 msgid "enable message threading, styles: shallow, deep"
-msgstr "cho phép luồng lời nhắn, kiểu: `shallow', `deep'"
+msgstr "cho phép luồng lời nhắn, kiểu: “shallow”, “deep”"
 
-#: builtin/log.c:1114
+#: builtin/log.c:1119
 msgid "signature"
 msgstr "chữ ký"
 
-#: builtin/log.c:1115
+#: builtin/log.c:1120
 msgid "add a signature"
 msgstr "thêm chữ ký"
 
-#: builtin/log.c:1117
+#: builtin/log.c:1122
 msgid "don't print the patch filenames"
 msgstr "không hiển thị các tên tập tin của miếng vá"
 
-#: builtin/log.c:1157
+#: builtin/log.c:1163
 #, c-format
 msgid "bogus committer info %s"
 msgstr "thông tin người chuyển giao không có thực %s"
 
-#: builtin/log.c:1202
+#: builtin/log.c:1208
 msgid "-n and -k are mutually exclusive."
 msgstr "-n và  -k loại từ lẫn nhau."
 
-#: builtin/log.c:1204
+#: builtin/log.c:1210
 msgid "--subject-prefix and -k are mutually exclusive."
 msgstr "--subject-prefix và -k xung khắc nhau."
 
-#: builtin/log.c:1212
+#: builtin/log.c:1218
 msgid "--name-only does not make sense"
 msgstr "--name-only không hợp lý"
 
-#: builtin/log.c:1214
+#: builtin/log.c:1220
 msgid "--name-status does not make sense"
 msgstr "--name-status không hợp lý"
 
-#: builtin/log.c:1216
+#: builtin/log.c:1222
 msgid "--check does not make sense"
 msgstr "--check không hợp lý"
 
-#: builtin/log.c:1239
+#: builtin/log.c:1245
 msgid "standard output, or directory, which one?"
 msgstr "đầu ra chuẩn, hay thư mục, chọn cái nào?"
 
-#: builtin/log.c:1241
+#: builtin/log.c:1247
 #, c-format
 msgid "Could not create directory '%s'"
-msgstr "Không thể tạo thư mục `%s'"
+msgstr "Không thể tạo thư mục “%s”"
 
-#: builtin/log.c:1394
+#: builtin/log.c:1400
 msgid "Failed to create output files"
 msgstr "Gặp lỗi khi tạo các tập tin kết xuất"
 
-#: builtin/log.c:1443
+#: builtin/log.c:1449
 msgid "git cherry [-v] [<upstream> [<head> [<limit>]]]"
 msgstr "git cherry [-v] [<thượng-nguồn> [<head> [<giới-hạn>]]]"
 
-#: builtin/log.c:1498
+#: builtin/log.c:1504
 #, c-format
 msgid ""
 "Could not find a tracked remote branch, please specify <upstream> manually.\n"
@@ -5584,7 +5604,7 @@ msgstr ""
 "Không tìm thấy nhánh mạng bị theo vết, hãy chỉ định <thượng-nguồn> một cách "
 "thủ công.\n"
 
-#: builtin/log.c:1511 builtin/log.c:1513 builtin/log.c:1525
+#: builtin/log.c:1517 builtin/log.c:1519 builtin/log.c:1531
 #, c-format
 msgid "Unknown commit %s"
 msgstr "Không hiểu lần chuyển giao (commit) %s"
@@ -5600,7 +5620,7 @@ msgstr "nhận dạng các trạng thái tập tin với thẻ"
 #: builtin/ls-files.c:465
 msgid "use lowercase letters for 'assume unchanged' files"
 msgstr ""
-"dùng chữ cái viết thường cho các tập tin 'assume unchanged' (giả định không "
+"dùng chữ cái viết thường cho các tập tin “assume unchanged” (giả định không "
 "thay đổi)"
 
 #: builtin/ls-files.c:467
@@ -5633,7 +5653,7 @@ msgstr "hiển thị các tập tin trên hệ thống tập tin mà nó cần 
 
 #: builtin/ls-files.c:482
 msgid "show 'other' directories' name only"
-msgstr "chỉ hiển thị tên của các thư mục 'khác'"
+msgstr "chỉ hiển thị tên của các thư mục “khác”"
 
 #: builtin/ls-files.c:485
 msgid "don't show empty directories"
@@ -5739,7 +5759,7 @@ msgstr "switch `m' yêu cầu một giá trị"
 #: builtin/merge.c:127
 #, c-format
 msgid "Could not find merge strategy '%s'.\n"
-msgstr "Không tìm thấy chiến lược hòa trộn `%s'.\n"
+msgstr "Không tìm thấy chiến lược hòa trộn “%s”.\n"
 
 #: builtin/merge.c:128
 #, c-format
@@ -5854,7 +5874,7 @@ msgstr "Không thông điệp hòa trộn -- không cập nhật HEAD\n"
 #: builtin/merge.c:436
 #, c-format
 msgid "'%s' does not point to a commit"
-msgstr "`%s' không chỉ đến một lần chuyển giao (commit) nào cả"
+msgstr "“%s” không chỉ đến một lần chuyển giao (commit) nào cả"
 
 #: builtin/merge.c:535
 #, c-format
@@ -5865,37 +5885,33 @@ msgstr "Chuỗi branch.%s.mergeoptions sai: %s"
 msgid "git write-tree failed to write a tree"
 msgstr "lệnh git write-tree gặp lỗi khi ghi một cây"
 
-#: builtin/merge.c:678
-msgid "failed to read the cache"
-msgstr "gặp lỗi khi đọc bộ nhớ tạm"
-
-#: builtin/merge.c:709
+#: builtin/merge.c:656
 msgid "Not handling anything other than two heads merge."
 msgstr "Không cầm nắm gì ngoài hai head hòa trộn"
 
-#: builtin/merge.c:723
+#: builtin/merge.c:670
 #, c-format
 msgid "Unknown option for merge-recursive: -X%s"
 msgstr "Không hiểu tùy chọn cho merge-recursive: -X%s"
 
-#: builtin/merge.c:737
+#: builtin/merge.c:684
 #, c-format
 msgid "unable to write %s"
 msgstr "không thể ghi %s"
 
-#: builtin/merge.c:876
+#: builtin/merge.c:773
 #, c-format
 msgid "Could not read from '%s'"
-msgstr "Không thể đọc từ `%s'"
+msgstr "Không thể đọc từ “%s”"
 
-#: builtin/merge.c:885
+#: builtin/merge.c:782
 #, c-format
 msgid "Not committing merge; use 'git commit' to complete the merge.\n"
 msgstr ""
-"Vẫn chưa hòa trộn các lần chuyển giao (commit); sử dụng lệnh `git commit' để "
+"Vẫn chưa hòa trộn các lần chuyển giao (commit); sử dụng lệnh “git commit” để "
 "hoàn tất việc hòa trộn.\n"
 
-#: builtin/merge.c:891
+#: builtin/merge.c:788
 msgid ""
 "Please enter a commit message to explain why this merge is necessary,\n"
 "especially if it merges an updated upstream into a topic branch.\n"
@@ -5908,59 +5924,59 @@ msgstr ""
 "đặc biệt là khi nó hòa trộn thượng nguồn đã cập nhật vào trong một nhánh "
 "topic.\n"
 "\n"
-"Những dòng được bắt đầu bằng '#' sẽ được bỏ qua, và phần chú thích này nếu "
+"Những dòng được bắt đầu bằng “#” sẽ được bỏ qua, và phần chú thích này nếu "
 "rỗng\n"
 "sẽ làm hủy bỏ lần chuyển giao (commit).\n"
 
-#: builtin/merge.c:915
+#: builtin/merge.c:812
 msgid "Empty commit message."
 msgstr "Chú thích của lần commit (chuyển giao) bị trống rỗng."
 
-#: builtin/merge.c:927
+#: builtin/merge.c:824
 #, c-format
 msgid "Wonderful.\n"
 msgstr "Thần kỳ.\n"
 
-#: builtin/merge.c:992
+#: builtin/merge.c:889
 #, c-format
 msgid "Automatic merge failed; fix conflicts and then commit the result.\n"
 msgstr ""
 "Việc tự động hòa trộn gặp lỗi; hãy sửa các xung đột sau đó chuyển giao "
 "(commit) kết quả.\n"
 
-#: builtin/merge.c:1008
+#: builtin/merge.c:905
 #, c-format
 msgid "'%s' is not a commit"
 msgstr "%s không phải là một lần commit (chuyển giao)"
 
-#: builtin/merge.c:1049
+#: builtin/merge.c:946
 msgid "No current branch."
 msgstr "không phải nhánh hiện hành"
 
-#: builtin/merge.c:1051
+#: builtin/merge.c:948
 msgid "No remote for the current branch."
 msgstr "Không có máy chủ cho nhánh hiện hành."
 
-#: builtin/merge.c:1053
+#: builtin/merge.c:950
 msgid "No default upstream defined for the current branch."
 msgstr "Không có thượng nguồn mặc định được định nghĩa cho nhánh hiện hành."
 
-#: builtin/merge.c:1058
+#: builtin/merge.c:955
 #, c-format
 msgid "No remote tracking branch for %s from %s"
 msgstr "Không nhánh mạng theo vết cho %s từ %s"
 
-#: builtin/merge.c:1145 builtin/merge.c:1302
+#: builtin/merge.c:1042 builtin/merge.c:1199
 #, c-format
 msgid "%s - not something we can merge"
 msgstr "%s - không phải là một số thứ chúng tôi có thể hòa trộn"
 
-#: builtin/merge.c:1213
+#: builtin/merge.c:1110
 msgid "There is no merge to abort (MERGE_HEAD missing)."
 msgstr ""
 "Ở đây không có lần hòa trộn nào được hủy bỏ giữa chừng cả (thiếu MERGE_HEAD)."
 
-#: builtin/merge.c:1229 git-pull.sh:31
+#: builtin/merge.c:1126 git-pull.sh:31
 msgid ""
 "You have not concluded your merge (MERGE_HEAD exists).\n"
 "Please, commit your changes before you can merge."
@@ -5968,11 +5984,11 @@ msgstr ""
 "Bạn chưa kết thúc việc hòa trộng (MERGE_HEAD vẫn tồn tại).\n"
 "Hãy chuyển giao (commit) các thay đổi trước khi bạn có thể hòa trộn."
 
-#: builtin/merge.c:1232 git-pull.sh:34
+#: builtin/merge.c:1129 git-pull.sh:34
 msgid "You have not concluded your merge (MERGE_HEAD exists)."
 msgstr "Bạn chưa kết thúc việc hòa trộng (MERGE_HEAD vẫn tồn tại)."
 
-#: builtin/merge.c:1236
+#: builtin/merge.c:1133
 msgid ""
 "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n"
 "Please, commit your changes before you can merge."
@@ -5980,85 +5996,85 @@ msgstr ""
 "Bạn chưa kết thúc việc cherry-pick (CHERRY_PICK_HEAD vẫn tồn tại).\n"
 "Hãy chuyển giao (commit) các thay đổi trước khi bạn có thể hòa trộn."
 
-#: builtin/merge.c:1239
+#: builtin/merge.c:1136
 msgid "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists)."
 msgstr "Bạn chưa kết thúc việc cherry-pick (CHERRY_PICK_HEAD vẫn tồn tại)."
 
-#: builtin/merge.c:1248
+#: builtin/merge.c:1145
 msgid "You cannot combine --squash with --no-ff."
 msgstr "Bạn không thể kết hợp --squash với --no-ff."
 
-#: builtin/merge.c:1253
+#: builtin/merge.c:1150
 msgid "You cannot combine --no-ff with --ff-only."
 msgstr "Bạn không thể kết hợp --no-ff với --ff-only."
 
-#: builtin/merge.c:1260
+#: builtin/merge.c:1157
 msgid "No commit specified and merge.defaultToUpstream not set."
 msgstr ""
 "Không chỉ ra lần chuyển giao (commit) và merge.defaultToUpstream chưa được "
 "đặt."
 
-#: builtin/merge.c:1292
+#: builtin/merge.c:1189
 msgid "Can merge only exactly one commit into empty head"
 msgstr ""
 "Không thể hòa trộn một cách đúng đắn một lần chuyển giao (commit) vào một "
 "head rỗng"
 
-#: builtin/merge.c:1295
+#: builtin/merge.c:1192
 msgid "Squash commit into empty head not supported yet"
 msgstr "Squash commit vào một head trống rỗng vẫn chưa được hỗ trợ"
 
-#: builtin/merge.c:1297
+#: builtin/merge.c:1194
 msgid "Non-fast-forward commit does not make sense into an empty head"
 msgstr ""
 "Chuyển giao (commit) không-fast-forward không hợp lý ở trong một head trống "
 "rỗng"
 
-#: builtin/merge.c:1412
+#: builtin/merge.c:1309
 #, c-format
 msgid "Updating %s..%s\n"
 msgstr "Đang cập nhật %s..%s\n"
 
-#: builtin/merge.c:1450
+#: builtin/merge.c:1348
 #, c-format
 msgid "Trying really trivial in-index merge...\n"
-msgstr "Đang thử hòa trộn kiểu 'trivial in-index'...\n"
+msgstr "Đang thử hòa trộn kiểu “trivial in-index”...\n"
 
-#: builtin/merge.c:1457
+#: builtin/merge.c:1355
 #, c-format
 msgid "Nope.\n"
 msgstr "Không.\n"
 
-#: builtin/merge.c:1489
+#: builtin/merge.c:1387
 msgid "Not possible to fast-forward, aborting."
 msgstr "Thực hiện lệnh fast-forward là không thể được, đang bỏ qua."
 
-#: builtin/merge.c:1512 builtin/merge.c:1591
+#: builtin/merge.c:1410 builtin/merge.c:1489
 #, c-format
 msgid "Rewinding the tree to pristine...\n"
 msgstr "Đang tua lại cây thành thời xa xưa...\n"
 
-#: builtin/merge.c:1516
+#: builtin/merge.c:1414
 #, c-format
 msgid "Trying merge strategy %s...\n"
 msgstr "Đang thử chiến lược hòa trộn %s...\n"
 
-#: builtin/merge.c:1582
+#: builtin/merge.c:1480
 #, c-format
 msgid "No merge strategy handled the merge.\n"
 msgstr "Không có chiến lược hòa trộn nào được nắm giữ (handle) sự hòa trộn.\n"
 
-#: builtin/merge.c:1584
+#: builtin/merge.c:1482
 #, c-format
 msgid "Merge with strategy %s failed.\n"
 msgstr "Hòa trộn với chiến lược %s gặp lỗi.\n"
 
-#: builtin/merge.c:1593
+#: builtin/merge.c:1491
 #, c-format
 msgid "Using the %s to prepare resolving by hand.\n"
 msgstr "Sử dụng %s để chuẩn bị giải quyết bằng tay.\n"
 
-#: builtin/merge.c:1605
+#: builtin/merge.c:1503
 #, c-format
 msgid "Automatic merge went well; stopped before committing as requested\n"
 msgstr ""
@@ -6091,7 +6107,7 @@ msgstr "tìm tổ tiên của hòa trộn n-way đơn"
 
 #: builtin/merge-base.c:100
 msgid "list revs not reachable from others"
-msgstr "liệt kê các 'rev' mà nó không thể đọc được từ cái khác"
+msgstr "liệt kê các “rev” mà nó không thể đọc được từ cái khác"
 
 #: builtin/merge-base.c:102
 msgid "is the first one ancestor of the other?"
@@ -6168,7 +6184,7 @@ msgstr "bỏ qua các lỗi liên quan đến di chuyển, đổi tên"
 #: builtin/mv.c:108
 #, c-format
 msgid "Checking rename of '%s' to '%s'\n"
-msgstr "Đang kiểm tra việc đổi tên của `%s' thành `%s'\n"
+msgstr "Đang kiểm tra việc đổi tên của “%s” thành “%s”\n"
 
 #: builtin/mv.c:112
 msgid "bad source"
@@ -6202,7 +6218,7 @@ msgstr "đích đã tồn tại sẵn rồi"
 #: builtin/mv.c:181
 #, c-format
 msgid "overwriting '%s'"
-msgstr "đang ghi đè lên `%s'"
+msgstr "đang ghi đè lên “%s”"
 
 #: builtin/mv.c:184
 msgid "Cannot overwrite"
@@ -6262,7 +6278,7 @@ msgstr "đọc từ đầu vào tiêu chuẩn"
 
 #: builtin/name-rev.c:236
 msgid "allow to print `undefined` names"
-msgstr "cho phép hiển thị các tên `chưa định nghĩa'"
+msgstr "cho phép hiển thị các tên `chưa định nghĩa`"
 
 #: builtin/notes.c:26
 msgid "git notes [--ref <notes_ref>] [list [<object>]]"
@@ -6377,26 +6393,26 @@ msgstr "git notes get-ref"
 #: builtin/notes.c:142
 #, c-format
 msgid "unable to start 'show' for object '%s'"
-msgstr "không thể khởi chạy 'show' cho đối tượng `%s'"
+msgstr "không thể khởi chạy “show” cho đối tượng “%s”"
 
 #: builtin/notes.c:148
 msgid "can't fdopen 'show' output fd"
-msgstr "không thể fdopen 'show' (lệnh hiển thị) mô tả tập tin (fd) kết xuất"
+msgstr "không thể fdopen “show” (lệnh hiển thị) mô tả tập tin (fd) kết xuất"
 
 #: builtin/notes.c:158
 #, c-format
 msgid "failed to close pipe to 'show' for object '%s'"
-msgstr "gặp lỗi khi đóng đường ống cho lệnh 'show' cho đối tượng `%s'"
+msgstr "gặp lỗi khi đóng đường ống cho lệnh “show” cho đối tượng “%s”"
 
 #: builtin/notes.c:161
 #, c-format
 msgid "failed to finish 'show' for object '%s'"
-msgstr "gặp lỗi khi hoàn thành `show' cho đối tượng `%s'"
+msgstr "gặp lỗi khi hoàn thành “show” cho đối tượng “%s”"
 
 #: builtin/notes.c:178 builtin/tag.c:347
 #, c-format
 msgid "could not create file '%s'"
-msgstr "không thể tạo tập tin `%s'"
+msgstr "không thể tạo tập tin “%s”"
 
 #: builtin/notes.c:192
 msgid "Please supply the note contents using either -m or -F option"
@@ -6420,12 +6436,12 @@ msgstr "Nội dung ghi chú còn lại %s"
 #: builtin/notes.c:254 builtin/tag.c:542
 #, c-format
 msgid "cannot read '%s'"
-msgstr "không thể đọc `%s'"
+msgstr "không thể đọc “%s”"
 
 #: builtin/notes.c:256 builtin/tag.c:545
 #, c-format
 msgid "could not open or read '%s'"
-msgstr "không thể mở để đọc hay ghi `%s'"
+msgstr "không thể mở để đọc hay ghi “%s”"
 
 #: builtin/notes.c:275 builtin/notes.c:448 builtin/notes.c:450
 #: builtin/notes.c:510 builtin/notes.c:564 builtin/notes.c:647
@@ -6433,12 +6449,12 @@ msgstr "không thể mở để đọc hay ghi `%s'"
 #: builtin/notes.c:971 builtin/reset.c:293 builtin/tag.c:558
 #, c-format
 msgid "Failed to resolve '%s' as a valid ref."
-msgstr "Gặp lỗi khi giải quyết `%s' như là một tham chiếu (ref) hợp lệ."
+msgstr "Gặp lỗi khi giải quyết “%s” như là một tham chiếu (ref) hợp lệ."
 
 #: builtin/notes.c:278
 #, c-format
 msgid "Failed to read object '%s'."
-msgstr "Gặp lỗi khi đọc đối tượng `%s'."
+msgstr "Gặp lỗi khi đọc đối tượng “%s”."
 
 #: builtin/notes.c:302
 msgid "Cannot commit uninitialized/unreferenced notes tree"
@@ -6449,7 +6465,7 @@ msgstr ""
 #: builtin/notes.c:343
 #, c-format
 msgid "Bad notes.rewriteMode value: '%s'"
-msgstr "Giá trị notes.rewriteMode sai: `%s'"
+msgstr "Giá trị notes.rewriteMode sai: “%s”"
 
 #: builtin/notes.c:353
 #, c-format
@@ -6461,17 +6477,17 @@ msgstr "Từ chối ghi đè ghi chú trong %s (nằm ngoài của refs/notes/)"
 #: builtin/notes.c:380
 #, c-format
 msgid "Bad %s value: '%s'"
-msgstr "Giá trị %s sai: `%s'"
+msgstr "Giá trị %s sai: “%s”"
 
 #: builtin/notes.c:444
 #, c-format
 msgid "Malformed input line: '%s'."
-msgstr "Dòng nhập vào dị hình: `%s'."
+msgstr "Dòng nhập vào dị hình: “%s”."
 
 #: builtin/notes.c:459
 #, c-format
 msgid "Failed to copy notes from '%s' to '%s'"
-msgstr "Gặp lỗi khi sao chép ghi chú (note) từ `%s' tới `%s'"
+msgstr "Gặp lỗi khi sao chép ghi chú (note) từ “%s” tới “%s”"
 
 #: builtin/notes.c:503 builtin/notes.c:557 builtin/notes.c:630
 #: builtin/notes.c:642 builtin/notes.c:715 builtin/notes.c:762
@@ -6516,7 +6532,7 @@ msgid ""
 "existing notes"
 msgstr ""
 "Không thể thêm các ghi chú. Đã tìm thấy các ghi chú đã có sẵn cho đối tượng "
-"%s. Sử dụng tùy chọn '-f' để ghi đè lên các ghi chú cũ"
+"%s. Sử dụng tùy chọn “-f” để ghi đè lên các ghi chú cũ"
 
 #: builtin/notes.c:588 builtin/notes.c:665
 #, c-format
@@ -6542,7 +6558,7 @@ msgid ""
 "existing notes"
 msgstr ""
 "Không thể sao chép các ghi chú. Đã tìm thấy các ghi chú đã có sẵn cho đối "
-"tượng %s. Sử dụng tùy chọn '-f' để ghi đè lên các ghi chú cũ"
+"tượng %s. Sử dụng tùy chọn “-f” để ghi đè lên các ghi chú cũ"
 
 #: builtin/notes.c:671
 #, c-format
@@ -6555,8 +6571,8 @@ 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 ""
-"Các tùy chọn -m/-F/-c/-C đã cổ không còn dùng nữa cho lệnh con `edit'.\n"
-"Xin hãy sử dụng lệnh sau để thay thế: `git notes add -f -m/-F/-c/-C'.\n"
+"Các tùy chọn -m/-F/-c/-C đã cổ không còn dùng nữa cho lệnh con “edit”.\n"
+"Xin hãy sử dụng lệnh sau để thay thế: “git notes add -f -m/-F/-c/-C”.\n"
 
 #: builtin/notes.c:867
 msgid "General options"
@@ -6571,7 +6587,7 @@ msgid ""
 "resolve notes conflicts using the given strategy (manual/ours/theirs/union/"
 "cat_sort_uniq)"
 msgstr ""
-"phân giải các xung đột `notes' sử dụng chiến lược đã đưa ra (manual/ours/"
+"phân giải các xung đột “notes” sử dụng chiến lược đã đưa ra (manual/ours/"
 "theirs/union/cat_sort_uniq)"
 
 #: builtin/notes.c:873
@@ -6611,7 +6627,7 @@ msgstr "notes_ref"
 
 #: builtin/notes.c:1071
 msgid "use notes from <notes_ref>"
-msgstr "dùng `notes' từ <notes_ref>"
+msgstr "dùng “notes” từ <notes_ref>"
 
 #: builtin/notes.c:1106 builtin/remote.c:1598
 #, c-format
@@ -6635,146 +6651,146 @@ msgstr ""
 msgid "deflate error (%d)"
 msgstr "lỗi giải nén (%d)"
 
-#: builtin/pack-objects.c:2398
+#: builtin/pack-objects.c:2397
 #, c-format
 msgid "unsupported index version %s"
 msgstr "phiên bản mục lục không được hỗ trợ %s"
 
-#: builtin/pack-objects.c:2402
+#: builtin/pack-objects.c:2401
 #, c-format
 msgid "bad index version '%s'"
-msgstr "phiên bản mục lục sai `%s'"
+msgstr "phiên bản mục lục sai “%s”"
 
-#: builtin/pack-objects.c:2425
+#: builtin/pack-objects.c:2424
 #, c-format
 msgid "option %s does not accept negative form"
 msgstr "tùy chọn %s không chấp nhận dạng thức âm"
 
-#: builtin/pack-objects.c:2429
+#: builtin/pack-objects.c:2428
 #, c-format
 msgid "unable to parse value '%s' for option %s"
-msgstr "không thể phân tích giá trị `%s' cho tùy chọn %s"
+msgstr "không thể phân tích giá trị “%s” cho tùy chọn %s"
 
-#: builtin/pack-objects.c:2448
+#: builtin/pack-objects.c:2447
 msgid "do not show progress meter"
 msgstr "không hiển thị bộ đo tiến trình"
 
-#: builtin/pack-objects.c:2450
+#: builtin/pack-objects.c:2449
 msgid "show progress meter"
 msgstr "hiển thị bộ đo tiến trình"
 
-#: builtin/pack-objects.c:2452
+#: builtin/pack-objects.c:2451
 msgid "show progress meter during object writing phase"
 msgstr "hiển thị bộ đo tiến triển trong suốt pha ghi đối tượng"
 
-#: builtin/pack-objects.c:2455
+#: builtin/pack-objects.c:2454
 msgid "similar to --all-progress when progress meter is shown"
 msgstr "tương tự --all-progress khi bộ đo tiến trình được xuất hiện"
 
-#: builtin/pack-objects.c:2456
+#: builtin/pack-objects.c:2455
 msgid "version[,offset]"
 msgstr "phiên bản[,offset]"
 
-#: builtin/pack-objects.c:2457
+#: builtin/pack-objects.c:2456
 msgid "write the pack index file in the specified idx format version"
 msgstr "ghi tập tin bảng mục lục gói (pack) ở phiên bản định dạng idx đã cho"
 
-#: builtin/pack-objects.c:2460
+#: builtin/pack-objects.c:2459
 msgid "maximum size of each output pack file"
 msgstr "kcíh thước tối đa cho tập tin gói được tạo"
 
-#: builtin/pack-objects.c:2462
+#: builtin/pack-objects.c:2461
 msgid "ignore borrowed objects from alternate object store"
 msgstr "bỏ qua các đối tượng vay mượn từ kho đối tượng thay thế"
 
-#: builtin/pack-objects.c:2464
+#: builtin/pack-objects.c:2463
 msgid "ignore packed objects"
 msgstr "bỏ qua các đối tượng đóng gói"
 
-#: builtin/pack-objects.c:2466
+#: builtin/pack-objects.c:2465
 msgid "limit pack window by objects"
 msgstr "giới hạn cửa sổ đóng gói theo đối tượng"
 
-#: builtin/pack-objects.c:2468
+#: builtin/pack-objects.c:2467
 msgid "limit pack window by memory in addition to object limit"
 msgstr "giới hạn cửa sổ đóng gói theo bộ nhớ cộng thêm với giới hạn đối tượng"
 
-#: builtin/pack-objects.c:2470
+#: builtin/pack-objects.c:2469
 msgid "maximum length of delta chain allowed in the resulting pack"
-msgstr "độ dài tối đa của chuỗi móc xích `delta' được phép trong gói kết quả"
+msgstr "độ dài tối đa của chuỗi móc xích “delta” được phép trong gói kết quả"
 
-#: builtin/pack-objects.c:2472
+#: builtin/pack-objects.c:2471
 msgid "reuse existing deltas"
 msgstr "dùng lại các delta sẵn có"
 
-#: builtin/pack-objects.c:2474
+#: builtin/pack-objects.c:2473
 msgid "reuse existing objects"
 msgstr "dùng lại các đối tượng sẵn có"
 
-#: builtin/pack-objects.c:2476
+#: builtin/pack-objects.c:2475
 msgid "use OFS_DELTA objects"
 msgstr "dùng các đối tượng OFS_DELTA"
 
-#: builtin/pack-objects.c:2478
+#: builtin/pack-objects.c:2477
 msgid "use threads when searching for best delta matches"
 msgstr "sử dụng các tuyến trình khi tìm kiếm cho các mẫu khớp delta tốt nhất"
 
-#: builtin/pack-objects.c:2480
+#: builtin/pack-objects.c:2479
 msgid "do not create an empty pack output"
 msgstr "không thể tạo kết xuất gói (pack) trống rỗng"
 
-#: builtin/pack-objects.c:2482
+#: builtin/pack-objects.c:2481
 msgid "read revision arguments from standard input"
-msgstr " đọc tham số `revision' từ thiết bị nhập chuẩn"
+msgstr " đọc tham số “revision” từ thiết bị nhập chuẩn"
 
-#: builtin/pack-objects.c:2484
+#: builtin/pack-objects.c:2483
 msgid "limit the objects to those that are not yet packed"
 msgstr "giới hạn các đối tượng thành những cái mà chúng vẫn chưa được đóng gói"
 
-#: builtin/pack-objects.c:2487
+#: builtin/pack-objects.c:2486
 msgid "include objects reachable from any reference"
 msgstr "bao gồm các đối tượng có thể đọc được từ bất kỳ tham chiếu nào"
 
-#: builtin/pack-objects.c:2490
+#: builtin/pack-objects.c:2489
 msgid "include objects referred by reflog entries"
 msgstr "bao gồm các đối tượng được tham chiếu bởi các mục reflog"
 
-#: builtin/pack-objects.c:2493
+#: builtin/pack-objects.c:2492
 msgid "output pack to stdout"
 msgstr "xuất gói ra đầu ra tiêu chuẩn"
 
-#: builtin/pack-objects.c:2495
+#: builtin/pack-objects.c:2494
 msgid "include tag objects that refer to objects to be packed"
 msgstr "bao gồm các đối tượng tham chiếu đến các đối tượng được đóng gói"
 
-#: builtin/pack-objects.c:2497
+#: builtin/pack-objects.c:2496
 msgid "keep unreachable objects"
 msgstr "giữ lại các đối tượng không thể đọc được"
 
-#: builtin/pack-objects.c:2498 parse-options.h:141
+#: builtin/pack-objects.c:2497 parse-options.h:141
 msgid "time"
 msgstr "thời-gian"
 
-#: builtin/pack-objects.c:2499
+#: builtin/pack-objects.c:2498
 msgid "unpack unreachable objects newer than <time>"
 msgstr ""
 "xả nén (gỡ khỏi gói) các đối tượng không thể đọc được mới hơn <thời-gian>"
 
-#: builtin/pack-objects.c:2502
+#: builtin/pack-objects.c:2501
 msgid "create thin packs"
 msgstr "tạo gói nhẹ"
 
-#: builtin/pack-objects.c:2504
+#: builtin/pack-objects.c:2503
 msgid "ignore packs that have companion .keep file"
 msgstr "bỏ qua các gói mà nó có tập tin .keep đi kèm"
 
-#: builtin/pack-objects.c:2506
+#: builtin/pack-objects.c:2505
 msgid "pack compression level"
 msgstr "mức nén gói"
 
-#: builtin/pack-objects.c:2508
+#: builtin/pack-objects.c:2507
 msgid "do not hide commits by grafts"
-msgstr "không ẩn các lần chuyển giao bởi `grafts'"
+msgstr "không ẩn các lần chuyển giao bởi “grafts”"
 
 #: builtin/pack-refs.c:6
 msgid "git pack-refs [options]"
@@ -6826,8 +6842,8 @@ msgid ""
 "To choose either option permanently, see push.default in 'git help config'."
 msgstr ""
 "\n"
-"Để chọn mỗi tùy chọn một cách cố định, xem push.default trong `git help "
-"config'."
+"Để chọn mỗi tùy chọn một cách cố định, xem push.default trong git help "
+"config."
 
 #: builtin/push.c:102
 #, c-format
@@ -6895,9 +6911,9 @@ msgid ""
 "your current branch '%s', without telling me what to push\n"
 "to update which remote branch."
 msgstr ""
-"Bạn đang push (đẩy lên) máy chủ `%s', mà nó không phải là thượng nguồn "
+"Bạn đang push (đẩy lên) máy chủ “%s”, mà nó không phải là thượng nguồn "
 "(upstream) của\n"
-"nhánh hiện tại `%s' của bạn, mà không báo cho tôi biết là cái gì được push\n"
+"nhánh hiện tại “%s” của bạn, mà không báo cho tôi biết là cái gì được push\n"
 "để cập nhật nhánh máy chủ nào."
 
 #: builtin/push.c:151
@@ -6918,7 +6934,7 @@ msgid ""
 "'current' instead of 'simple' if you sometimes use older versions of Git)"
 msgstr ""
 "biến push.default chưa được đặt; giá trị ngầm định của nó\n"
-"đã được thay đổi trong Git 2.0 từ 'matching' thành 'simple'.\n"
+"đã được thay đổi trong Git 2.0 từ “matching” thành “simple”.\n"
 "Để không hiển thị nhắc nhở này và duy trì cách xử lý sau\n"
 "những thay đổi mặc định này, hãy chạy lệnh:\n"
 "\n"
@@ -6928,10 +6944,10 @@ msgstr ""
 "\n"
 "  git config --global push.default simple\n"
 "\n"
-"Xem `git help config' và tìm đến `push.default' để có thêm thông tin.\n"
-"(chế độ 'simple' được bắt đầu sử dụng từ Git 1.7.11. Sử dụng chế độ tương "
+"Xem “git help config” và tìm đến “push.default” để có thêm thông tin.\n"
+"(chế độ “simple” được bắt đầu sử dụng từ Git 1.7.11. Sử dụng chế độ tương "
 "tự\n"
-"`current' thay vì `simple' nếu bạn thỉnh thoảng phải sử dụng bản Git cũ)"
+"“current” thay vì “simple” nếu bạn thỉnh thoảng phải sử dụng bản Git cũ)"
 
 #: builtin/push.c:199
 msgid ""
@@ -6948,10 +6964,10 @@ msgid ""
 "See the 'Note about fast-forwards' in 'git push --help' for details."
 msgstr ""
 "Việc cập nhật bị từ chối bởi vì đầu mút của nhánh được push nằm đằng sau bộ\n"
-"phận tương ứng của máy chủ. Hòa trộn với các thay đổi từ máy chủ (v.d. `git "
-"pull')\n"
+"phận tương ứng của máy chủ. Hòa trộn với các thay đổi từ máy chủ (v.d. git "
+"pull)\n"
 "trước khi lại push lần nữa.\n"
-"Xem trong phần 'Note about fast-forwards' từ lệnh `git push --help' để có "
+"Xem trong phần “Note about fast-forwards” từ lệnh “git push --help” để có "
 "thông tin chi tiết."
 
 #: builtin/push.c:212
@@ -6964,9 +6980,9 @@ msgstr ""
 "Việc cập nhật bị từ chối bởi vì đầu mút của nhánh được push nằm đằng sau bộ\n"
 "phận tương ứng của máy chủ. Nếu bạn không có ý định push nhánh đó, bạn có lẽ "
 "muốn\n"
-"chỉ định các nhánh để push hoặt là đặt nội dung cho biến cấu hình 'push."
-"default'\n"
-"thành 'simple', 'current' hoặc 'upstream' để chỉ push nhánh hiện hành mà "
+"chỉ định các nhánh để push hoặt là đặt nội dung cho biến cấu hình push."
+"default\n"
+"thành “simple”, “current” hoặc “upstream” để chỉ push nhánh hiện hành mà "
 "thôi."
 
 #: builtin/push.c:218
@@ -6979,8 +6995,8 @@ msgstr ""
 "Việc cập nhật bị từ chối bởi vì đầu mút của nhánh được push nằm đằng sau bộ\n"
 "phận tương ứng của máy chủ. Checkou nhánh này và hòa trộn với các thay đổi "
 "từ máy chủ\n"
-"(v.d. `git pull') trước khi lại push lần nữa.\n"
-"Xem trong phần 'Note about fast-forwards' từ lệnh `git push --help' để có "
+"(v.d. “git pull”) trước khi lại push lần nữa.\n"
+"Xem trong phần “Note about fast-forwards” từ lệnh “git push --help” để có "
 "thông tin chi tiết."
 
 #: builtin/push.c:258
@@ -6991,12 +7007,12 @@ msgstr "Đang push (đẩy) lên %s\n"
 #: builtin/push.c:262
 #, c-format
 msgid "failed to push some refs to '%s'"
-msgstr "gặp lỗi khi push (đẩy lên) một số tham chiếu (ref) đến `%s'"
+msgstr "gặp lỗi khi push (đẩy lên) một số tham chiếu (ref) đến “%s”"
 
 #: builtin/push.c:294
 #, c-format
 msgid "bad repository '%s'"
-msgstr "repository (kho) sai `%s'"
+msgstr "repository (kho) sai “%s”"
 
 #: builtin/push.c:295
 msgid ""
@@ -7126,11 +7142,11 @@ msgstr "thực hiện một hòa trộn thêm vào việc đọc"
 #: builtin/read-tree.c:117
 msgid "3-way merge if no file level merging required"
 msgstr ""
-"hòa trộn kiểu `3-way' nếu không có tập tin mức hòa trộn nào được yêu cầu "
+"hòa trộn kiểu “3-way” nếu không có tập tin mức hòa trộn nào được yêu cầu "
 
 #: builtin/read-tree.c:119
 msgid "3-way merge in presence of adds and removes"
-msgstr "hòa trộn 3-way trong sự hiện diện của `adds' và `removes'"
+msgstr "hòa trộn 3-way trong sự hiện diện của “adds” và “removes”"
 
 #: builtin/read-tree.c:121
 msgid "same as -m, but discard unmerged entries"
@@ -7307,7 +7323,7 @@ msgstr "đang chỉ định một nhánh master không hợp lý với tùy ch
 
 #: builtin/remote.c:187
 msgid "specifying branches to track makes sense only with fetch mirrors"
-msgstr "chỉ định những nhánh để theo vết chỉ hợp lý với các 'fetch mirror'"
+msgstr "chỉ định những nhánh để theo vết chỉ hợp lý với các “fetch mirror”"
 
 #: builtin/remote.c:195 builtin/remote.c:646
 #, c-format
@@ -7317,12 +7333,12 @@ msgstr "máy chủ %s đã tồn tại rồi."
 #: builtin/remote.c:199 builtin/remote.c:650
 #, c-format
 msgid "'%s' is not a valid remote name"
-msgstr "`%s' không phải tên máy chủ hợp lệ"
+msgstr "“%s” không phải tên máy chủ hợp lệ"
 
 #: builtin/remote.c:243
 #, c-format
 msgid "Could not setup master '%s'"
-msgstr "Không thể cài đặt nhánh master `%s'"
+msgstr "Không thể cài đặt nhánh master “%s”"
 
 #: builtin/remote.c:299
 #, c-format
@@ -7345,7 +7361,7 @@ msgstr "(xoá)"
 #: builtin/remote.c:595 builtin/remote.c:601 builtin/remote.c:607
 #, c-format
 msgid "Could not append '%s' to '%s'"
-msgstr "Không thể nối thêm `%s' vào `%s'"
+msgstr "Không thể nối thêm “%s” vào “%s”"
 
 #: builtin/remote.c:639 builtin/remote.c:792 builtin/remote.c:890
 #, c-format
@@ -7355,12 +7371,12 @@ msgstr "Không có máy chủ nào như thế: %s"
 #: builtin/remote.c:656
 #, c-format
 msgid "Could not rename config section '%s' to '%s'"
-msgstr "Không thể đổi tên chương (section) cấu hình từ `%s' thành `%s'"
+msgstr "Không thể đổi tên chương (section) cấu hình từ “%s” thành “%s”"
 
 #: builtin/remote.c:662 builtin/remote.c:799
 #, c-format
 msgid "Could not remove config section '%s'"
-msgstr "Không thể gỡ bỏ chương (section) cấu hình `%s'"
+msgstr "Không thể gỡ bỏ chương (section) cấu hình “%s”"
 
 #: builtin/remote.c:677
 #, c-format
@@ -7369,19 +7385,19 @@ msgid ""
 "\t%s\n"
 "\tPlease update the configuration manually if necessary."
 msgstr ""
-"Không cập nhật 'non-default fetch respec'\n"
+"Không cập nhật “non-default fetch respec”\n"
 "\t%s\n"
 "\tXin hãy cập nhật phần cấu hình một cách thủ công nếu thấy cần thiết."
 
 #: builtin/remote.c:683
 #, c-format
 msgid "Could not append '%s'"
-msgstr "Không thể nối thêm `%s'"
+msgstr "Không thể nối thêm “%s”"
 
 #: builtin/remote.c:694
 #, c-format
 msgid "Could not set '%s'"
-msgstr "Không thể đặt `%s'"
+msgstr "Không thể đặt “%s”"
 
 #: builtin/remote.c:716
 #, c-format
@@ -7424,7 +7440,7 @@ msgstr " được theo vết"
 
 #: builtin/remote.c:948
 msgid " stale (use 'git remote prune' to remove)"
-msgstr " cũ (dùng `git remote prune' để gỡ bỏ)"
+msgstr " cũ (dùng “git remote prune” để gỡ bỏ)"
 
 #: builtin/remote.c:950
 msgid " ???"
@@ -7546,19 +7562,19 @@ msgstr " (trạng thái không được yêu cầu)"
 #: builtin/remote.c:1163
 msgid "  Local branch configured for 'git pull':"
 msgid_plural "  Local branches configured for 'git pull':"
-msgstr[0] "  Nhánh nội bộ đã được cấu hình cho lệnh `git pull':"
-msgstr[1] "  Những nhánh nội bộ đã được cấu hình cho lệnh `git pull':"
+msgstr[0] "  Nhánh nội bộ đã được cấu hình cho lệnh “git pull”:"
+msgstr[1] "  Những nhánh nội bộ đã được cấu hình cho lệnh “git pull”:"
 
 #: builtin/remote.c:1171
 msgid "  Local refs will be mirrored by 'git push'"
-msgstr "  refs nội bộ sẽ được phản chiếu bởi lệnh `git push'"
+msgstr "  refs nội bộ sẽ được phản chiếu bởi lệnh “git push”"
 
 #: builtin/remote.c:1178
 #, c-format
 msgid "  Local ref configured for 'git push'%s:"
 msgid_plural "  Local refs configured for 'git push'%s:"
-msgstr[0] "  Tham chiếu nội bộ được cấu hình cho lệnh `git push'%s:"
-msgstr[1] "  Những tham chiếu nội bộ được cấu hình cho lệnh `git push'%s:"
+msgstr[0] "  Tham chiếu nội bộ được cấu hình cho lệnh “git push”%s:"
+msgstr[1] "  Những tham chiếu nội bộ được cấu hình cho lệnh “git push”%s:"
 
 #: builtin/remote.c:1199
 msgid "set refs/remotes/<name>/HEAD according to remote"
@@ -7628,7 +7644,7 @@ msgstr "cắt máy chủ sau khi lấy về"
 #: builtin/remote.c:1387 builtin/remote.c:1461
 #, c-format
 msgid "No such remote '%s'"
-msgstr "Không có máy chủ nào có tên `%s'"
+msgstr "Không có máy chủ nào có tên “%s”"
 
 #: builtin/remote.c:1407
 msgid "add branch"
@@ -7640,7 +7656,7 @@ msgstr "chưa chỉ ra máy chủ nào"
 
 #: builtin/remote.c:1436
 msgid "manipulate push URLs"
-msgstr "đẩy các `URL' bằng tay"
+msgstr "đẩy các “URL” bằng tay"
 
 #: builtin/remote.c:1438
 msgid "add URL"
@@ -7684,15 +7700,15 @@ msgstr "git replace -d <đối tượng>..."
 msgid "git replace -l [<pattern>]"
 msgstr "git replace -l [<mẫu>]"
 
-#: builtin/replace.c:118
+#: builtin/replace.c:121
 msgid "list replace refs"
 msgstr "liệt kê các refs thay thế"
 
-#: builtin/replace.c:119
+#: builtin/replace.c:122
 msgid "delete replace refs"
 msgstr "xóa tham chiếu (refs) thay thế"
 
-#: builtin/replace.c:120
+#: builtin/replace.c:123
 msgid "replace the ref if it exists"
 msgstr "thay thế tham chiếu (ref) nếu nó đã sẵn có"
 
@@ -7796,7 +7812,7 @@ msgstr "đặt lại HEAD nhưng giữ lại các thay đổi nội bộ"
 #: builtin/reset.c:303
 #, c-format
 msgid "Could not parse object '%s'."
-msgstr "không thể phân tích đối tượng `%s'."
+msgstr "không thể phân tích đối tượng “%s”."
 
 #: builtin/reset.c:308
 msgid "--patch is incompatible with --{hard,mixed,soft}"
@@ -7805,8 +7821,8 @@ msgstr "--patch xung khắc với --{hard,mixed,soft}"
 #: builtin/reset.c:317
 msgid "--mixed with paths is deprecated; use 'git reset -- <paths>' instead."
 msgstr ""
-"--mixed với các đường dẫn không còn dùng nữa; hãy thay thế bằng lệnh `git "
-"reset -- <đường_dẫn>'."
+"--mixed với các đường dẫn không còn dùng nữa; hãy thay thế bằng lệnh git "
+"reset -- <đường_dẫn>."
 
 #: builtin/reset.c:319
 #, c-format
@@ -7821,7 +7837,7 @@ msgstr "%s reset không được phép trên kho bare (trên máy chủ)"
 #: builtin/reset.c:347
 #, c-format
 msgid "Could not reset index file to revision '%s'."
-msgstr "Không thể đặt lại (reset) bảng mục lục thành điểm xét lại `%s'."
+msgstr "Không thể đặt lại (reset) bảng mục lục thành điểm xét lại “%s”."
 
 #: builtin/rev-parse.c:339
 msgid "git rev-parse --parseopt [options] -- [<args>...]"
@@ -7829,7 +7845,7 @@ msgstr "git rev-parse --parseopt [các-tùy-chọn] -- [<th.số>...]"
 
 #: builtin/rev-parse.c:344
 msgid "keep the `--` passed as an arg"
-msgstr "giữ '--' chuyển qua làm tham số"
+msgstr "giữ `--` chuyển qua làm tham số"
 
 #: builtin/rev-parse.c:346
 msgid "stop parsing after the first non-option argument"
@@ -7938,63 +7954,73 @@ msgstr "revert gặp lỗi"
 msgid "cherry-pick failed"
 msgstr "cherry-pick gặp lỗi"
 
-#: builtin/rm.c:14
+#: builtin/rm.c:15
 msgid "git rm [options] [--] <file>..."
 msgstr "git rm [các-tùy-chọn] [--] <tập-tin>..."
 
-#: builtin/rm.c:109
+#: builtin/rm.c:64 builtin/rm.c:186
+#, c-format
+msgid ""
+"submodule '%s' (or one of its nested submodules) uses a .git directory\n"
+"(use 'rm -rf' if you really want to remove it including all of its history)"
+msgstr ""
+"mô-đun-con '%s' (hoặc cái nằm trong các mô-đun-con) dùng thư mục .git\n"
+"(dùng 'rm -rf' nếu bạn thực sự muốn gỡ bỏ nó cùng với tất cả lịch sử của "
+"chúng)"
+
+#: builtin/rm.c:174
 #, c-format
 msgid ""
 "'%s' has staged content different from both the file and the HEAD\n"
 "(use -f to force removal)"
 msgstr ""
-"`%s' có nội dung được lưu trạng thái khác biệt từ cả tập tin và cả HEAD\n"
+"“%s” có nội dung được lưu trạng thái khác biệt từ cả tập tin và cả HEAD\n"
 "(dùng tùy chọn -f để ép buộc gỡ bỏ)"
 
-#: builtin/rm.c:115
+#: builtin/rm.c:180
 #, c-format
 msgid ""
 "'%s' has changes staged in the index\n"
 "(use --cached to keep the file, or -f to force removal)"
 msgstr ""
-"`%s' có các thay đổi được lưu trạng thái trong bảng mục lục\n"
+"“%s” có các thay đổi được lưu trạng thái trong bảng mục lục\n"
 "(dùng tùy chọn --cached để giữ tập tin, hoặc -f để ép buộc gỡ bỏ)"
 
-#: builtin/rm.c:119
+#: builtin/rm.c:191
 #, c-format
 msgid ""
 "'%s' has local modifications\n"
 "(use --cached to keep the file, or -f to force removal)"
 msgstr ""
-"`%s' có các thay đổi nội bộ\n"
+"“%s” có các thay đổi nội bộ\n"
 "(dùng tùy chọn --cached để giữ tập tin, hoặc -f để ép buộc gỡ bỏ)"
 
-#: builtin/rm.c:134
+#: builtin/rm.c:207
 msgid "do not list removed files"
 msgstr "không liệt kê các tập tin đã gỡ bỏ"
 
-#: builtin/rm.c:135
+#: builtin/rm.c:208
 msgid "only remove from the index"
 msgstr "chỉ gỡ bỏ từ mục lục"
 
-#: builtin/rm.c:136
+#: builtin/rm.c:209
 msgid "override the up-to-date check"
 msgstr "ghi đè lên kiểm tra cập nhật"
 
-#: builtin/rm.c:137
+#: builtin/rm.c:210
 msgid "allow recursive removal"
 msgstr "cho phép gỡ bỏ đệ qui"
 
-#: builtin/rm.c:139
+#: builtin/rm.c:212
 msgid "exit with a zero status even if nothing matched"
 msgstr "thoát ra với trạng thái khác không thậm chí nếu không có gì khớp"
 
-#: builtin/rm.c:194
+#: builtin/rm.c:268
 #, c-format
 msgid "not removing '%s' recursively without -r"
-msgstr "không thể gỡ bỏ `%s' một cách đệ qui mà không có tùy chọn -r"
+msgstr "không thể gỡ bỏ “%s” một cách đệ qui mà không có tùy chọn -r"
 
-#: builtin/rm.c:230
+#: builtin/rm.c:307
 #, c-format
 msgid "git rm: unable to remove %s"
 msgstr "git rm: không thể gỡ bỏ %s"
@@ -8054,7 +8080,7 @@ msgstr "hiển thị các nhánh remote-tracking"
 
 #: builtin/show-branch.c:655
 msgid "color '*!+-' corresponding to the branch"
-msgstr "màu '*!+-' tương ứng với nhánh"
+msgstr "màu “*!+-” tương ứng với nhánh"
 
 #: builtin/show-branch.c:657
 msgid "show <n> more commits after the common ancestor"
@@ -8106,7 +8132,7 @@ msgstr "<n>[,<cơ sở>]"
 
 #: builtin/show-branch.c:679
 msgid "show <n> most recent ref-log entries starting at base"
-msgstr "hiển thị <n> các mục `ref-log' gần nhất kể từ nền (base)"
+msgstr "hiển thị <n> các mục “ref-log” gần nhất kể từ nền (base)"
 
 #: builtin/show-ref.c:10
 msgid ""
@@ -8120,38 +8146,38 @@ msgstr ""
 msgid "git show-ref --exclude-existing[=pattern] < ref-list"
 msgstr "git show-ref --exclude-existing[=mẫu] < ref-list"
 
-#: builtin/show-ref.c:182
+#: builtin/show-ref.c:165
 msgid "only show tags (can be combined with heads)"
 msgstr "chỉ hiển thị thẻ (có thể tổ hợp cùng với đầu)"
 
-#: builtin/show-ref.c:183
+#: builtin/show-ref.c:166
 msgid "only show heads (can be combined with tags)"
 msgstr "chỉ hiển thị đầu (có thể tổ hợp cùng với thẻ)"
 
-#: builtin/show-ref.c:184
+#: builtin/show-ref.c:167
 msgid "stricter reference checking, requires exact ref path"
 msgstr ""
 "việc kiểm tra tham chiếu chính xác, đòi hỏi chính xác đường dẫn tham chiếu "
 "(ref)"
 
-#: builtin/show-ref.c:187 builtin/show-ref.c:189
+#: builtin/show-ref.c:170 builtin/show-ref.c:172
 msgid "show the HEAD reference"
 msgstr "hiển thị tham chiếu của HEAD"
 
-#: builtin/show-ref.c:191
+#: builtin/show-ref.c:174
 msgid "dereference tags into object IDs"
 msgstr "bãi bỏ tham chiếu các thẻ thành ra các ID đối tượng"
 
-#: builtin/show-ref.c:193
+#: builtin/show-ref.c:176
 msgid "only show SHA1 hash using <n> digits"
 msgstr "chỉ hiển thị mã băm SHA1 sử dụng <n> chữ số"
 
-#: builtin/show-ref.c:197
+#: builtin/show-ref.c:180
 msgid "do not print results to stdout (useful with --verify)"
 msgstr ""
 "không hiển thị kết quả ra đầu ra chuẩn (stdout) (chỉ hữu dụng với --verify)"
 
-#: builtin/show-ref.c:199
+#: builtin/show-ref.c:182
 msgid "show refs from stdin that aren't in local repository"
 msgstr ""
 "hiển thị các tham chiếu (refs) từ đầu vào tiêu chuẩn (stdin) cái mà không ở "
@@ -8161,20 +8187,28 @@ msgstr ""
 msgid "git symbolic-ref [options] name [ref]"
 msgstr "git symbolic-ref  [các-tùy-chọn] tên [t.chiếu]"
 
-#: builtin/symbolic-ref.c:38
+#: builtin/symbolic-ref.c:8
+msgid "git symbolic-ref -d [-q] name"
+msgstr "git symbolic-ref -d [-q] tên"
+
+#: builtin/symbolic-ref.c:40
 msgid "suppress error message for non-symbolic (detached) refs"
 msgstr ""
-"chặn các thông tin lỗi cho các tham chiếu (refs) `non-symbolic' (bị tách ra)"
+"chặn các thông tin lỗi cho các tham chiếu (refs) “non-symbolic” (bị tách ra)"
 
-#: builtin/symbolic-ref.c:39
+#: builtin/symbolic-ref.c:41
+msgid "delete symbolic ref"
+msgstr "xóa tham chiếu (ref) tượng trưng"
+
+#: builtin/symbolic-ref.c:42
 msgid "shorten ref output"
 msgstr "làm ngắn kết xuất ref (tham chiếu)"
 
-#: builtin/symbolic-ref.c:40 builtin/update-ref.c:18
+#: builtin/symbolic-ref.c:43 builtin/update-ref.c:18
 msgid "reason"
 msgstr "lý do"
 
-#: builtin/symbolic-ref.c:40 builtin/update-ref.c:18
+#: builtin/symbolic-ref.c:43 builtin/update-ref.c:18
 msgid "reason of the update"
 msgstr "lý do cập nhật"
 
@@ -8203,7 +8237,7 @@ msgstr "git tag -v <tên-thẻ>..."
 #: builtin/tag.c:60
 #, c-format
 msgid "malformed object at '%s'"
-msgstr "đối tượng dị hình tại `%s'"
+msgstr "đối tượng dị hình tại “%s”"
 
 #: builtin/tag.c:207
 #, c-format
@@ -8213,17 +8247,17 @@ msgstr "tên thẻ quá dài: %.*s..."
 #: builtin/tag.c:212
 #, c-format
 msgid "tag '%s' not found."
-msgstr "không tìm thấy tìm thấy thẻ `%s'."
+msgstr "không tìm thấy tìm thấy thẻ “%s”."
 
 #: builtin/tag.c:227
 #, c-format
 msgid "Deleted tag '%s' (was %s)\n"
-msgstr "Thẻ đã bị xóa `%s' (trước là %s)\n"
+msgstr "Thẻ đã bị xóa “%s” (trước là %s)\n"
 
 #: builtin/tag.c:239
 #, c-format
 msgid "could not verify the tag '%s'"
-msgstr "không thể thẩm tra thẻ `%s'"
+msgstr "không thể thẩm tra thẻ “%s”"
 
 #: builtin/tag.c:249
 msgid ""
@@ -8236,7 +8270,7 @@ msgstr ""
 "\n"
 "#\n"
 "# Viết các ghi chú cho (thẻ) tag\n"
-"# Những dòng được bắt đầu bằng '#' sẽ được bỏ qua.\n"
+"# Những dòng được bắt đầu bằng “#” sẽ được bỏ qua.\n"
 "#\n"
 
 #: builtin/tag.c:256
@@ -8251,7 +8285,7 @@ msgstr ""
 "\n"
 "#\n"
 "# Viết các ghi chú cho (thẻ) tag\n"
-"# Những dòng được bắt đầu bằng '#' sẽ được bỏ qua; bạn có thể xóa chúng đi "
+"# Những dòng được bắt đầu bằng “#” sẽ được bỏ qua; bạn có thể xóa chúng đi "
 "nếu muốn.\n"
 "#\n"
 
@@ -8282,12 +8316,12 @@ msgstr "Nội dung ghi chú còn lại %s\n"
 
 #: builtin/tag.c:425
 msgid "switch 'points-at' requires an object"
-msgstr "chuyển đến 'points-at' yêu cần một đối tượng"
+msgstr "chuyển đến “points-at” yêu cần một đối tượng"
 
 #: builtin/tag.c:427
 #, c-format
 msgid "malformed object name '%s'"
-msgstr "tên đối tượng dị hình `%s'"
+msgstr "tên đối tượng dị hình “%s”"
 
 #: builtin/tag.c:447
 msgid "list tag names"
@@ -8372,12 +8406,12 @@ msgstr "quá nhiều đối số"
 #: builtin/tag.c:561
 #, c-format
 msgid "'%s' is not a valid tag name."
-msgstr "`%s' không phải thẻ hợp lệ."
+msgstr "“%s” không phải thẻ hợp lệ."
 
 #: builtin/tag.c:566
 #, c-format
 msgid "tag '%s' already exists"
-msgstr "Thẻ `%s' đã tồn tại rồi"
+msgstr "Thẻ “%s” đã tồn tại rồi"
 
 #: builtin/tag.c:584
 #, c-format
@@ -8392,121 +8426,121 @@ msgstr "%s: không thể cập nhật ref (tham chiếu)"
 #: builtin/tag.c:588
 #, c-format
 msgid "Updated tag '%s' (was %s)\n"
-msgstr "Thẻ đã cập nhật `%s' (cũ là %s)\n"
+msgstr "Đã cập nhật thẻ “%s” (trước là %s)\n"
 
 #: builtin/update-index.c:401
 msgid "git update-index [options] [--] [<file>...]"
 msgstr "git update-index [các-tùy-chọn] [<tập-tin>...]"
 
-#: builtin/update-index.c:717
+#: builtin/update-index.c:718
 msgid "continue refresh even when index needs update"
 msgstr "tiếp tục làm mới ngay cả khi bảng mục lục cần được cập nhật"
 
-#: builtin/update-index.c:720
+#: builtin/update-index.c:721
 msgid "refresh: ignore submodules"
 msgstr "refresh: lờ đi mô-đun-con"
 
-#: builtin/update-index.c:723
+#: builtin/update-index.c:724
 msgid "do not ignore new files"
 msgstr "không bỏ qua các tập tin mới tạo"
 
-#: builtin/update-index.c:725
+#: builtin/update-index.c:726
 msgid "let files replace directories and vice-versa"
-msgstr "để các tập tin thay thế các thư mục và `vice-versa'"
+msgstr "để các tập tin thay thế các thư mục và “vice-versa”"
 
-#: builtin/update-index.c:727
+#: builtin/update-index.c:728
 msgid "notice files missing from worktree"
 msgstr "thông báo các tập-tin thiếu trong thư-mục làm việc"
 
-#: builtin/update-index.c:729
+#: builtin/update-index.c:730
 msgid "refresh even if index contains unmerged entries"
 msgstr ""
 "làm tươi mới thậm chí khi bảng mục lục chứa các mục tin chưa được hòa trộn"
 
-#: builtin/update-index.c:732
+#: builtin/update-index.c:733
 msgid "refresh stat information"
 msgstr "lấy lại thông tin thống kê"
 
-#: builtin/update-index.c:736
+#: builtin/update-index.c:737
 msgid "like --refresh, but ignore assume-unchanged setting"
-msgstr "giống --refresh, nhưng bỏ qua các cài đặt `assume-unchanged'"
+msgstr "giống --refresh, nhưng bỏ qua các cài đặt “assume-unchanged”"
 
-#: builtin/update-index.c:740
+#: builtin/update-index.c:741
 msgid "<mode> <object> <path>"
 msgstr "<mode> <đối tượng> <đường dẫn>"
 
-#: builtin/update-index.c:741
+#: builtin/update-index.c:742
 msgid "add the specified entry to the index"
 msgstr "thêm các tập tin đã chỉ ra vào bảng mục lục"
 
-#: builtin/update-index.c:745
+#: builtin/update-index.c:746
 msgid "(+/-)x"
 msgstr "(+/-)x"
 
-#: builtin/update-index.c:746
+#: builtin/update-index.c:747
 msgid "override the executable bit of the listed files"
 msgstr "ghi đè lên bít thi hành của các tập tin được liệt kê"
 
-#: builtin/update-index.c:750
+#: builtin/update-index.c:751
 msgid "mark files as \"not changing\""
 msgstr "Đánh dấu các tập tin là \"không thay đổi\""
 
-#: builtin/update-index.c:753
+#: builtin/update-index.c:754
 msgid "clear assumed-unchanged bit"
 msgstr "xóa bít  assumed-unchanged"
 
-#: builtin/update-index.c:756
+#: builtin/update-index.c:757
 msgid "mark files as \"index-only\""
-msgstr "đánh dấu các tập tin là `chỉ-đọc'"
+msgstr "đánh dấu các tập tin là “chỉ-đọc”"
 
-#: builtin/update-index.c:759
+#: builtin/update-index.c:760
 msgid "clear skip-worktree bit"
 msgstr "xóa bít skip-worktree"
 
-#: builtin/update-index.c:762
+#: builtin/update-index.c:763
 msgid "add to index only; do not add content to object database"
 msgstr ""
 "chỉ thêm vào bảng mục lục; không thêm nội dung vào cơ sở dữ liệu đối tượng"
 
-#: builtin/update-index.c:764
+#: builtin/update-index.c:765
 msgid "remove named paths even if present in worktree"
 msgstr ""
 "gỡ bỏ các đường dẫn được đặt tên thậm chí cả khi nó hiện diện trong thư mục "
 "làm việc"
 
-#: builtin/update-index.c:766
+#: builtin/update-index.c:767
 msgid "with --stdin: input lines are terminated by null bytes"
 msgstr "với tùy chọn --stdin: các dòng đầu vào được chấm dứt bởi ký tự null"
 
-#: builtin/update-index.c:768
+#: builtin/update-index.c:769
 msgid "read list of paths to be updated from standard input"
 msgstr "đọc danh sách đường dẫn cần cập nhật từ đầu vào tiêu chuẩn"
 
-#: builtin/update-index.c:772
+#: builtin/update-index.c:773
 msgid "add entries from standard input to the index"
 msgstr "không thể đọc các mục từ đầu vào tiêu chuẩn vào bảng mục lục"
 
-#: builtin/update-index.c:776
+#: builtin/update-index.c:777
 msgid "repopulate stages #2 and #3 for the listed paths"
 msgstr "phục hồi các trạng thái #2 và #3 cho các đường dẫn được liệt kê"
 
-#: builtin/update-index.c:780
+#: builtin/update-index.c:781
 msgid "only update entries that differ from HEAD"
 msgstr "chỉ cập nhật các mục tin mà nó khác biệt so với HEAD"
 
-#: builtin/update-index.c:784
+#: builtin/update-index.c:785
 msgid "ignore files missing from worktree"
 msgstr "bỏ qua các tập-tin thiếu trong thư-mục làm việc"
 
-#: builtin/update-index.c:787
+#: builtin/update-index.c:788
 msgid "report actions to standard output"
 msgstr "báo cáo các thao tác ra thiết bị xuất chuẩn"
 
-#: builtin/update-index.c:789
+#: builtin/update-index.c:790
 msgid "(for porcelains) forget saved unresolved conflicts"
-msgstr "(cho `porcelains') quên các xung đột chưa được giải quyết đã ghi"
+msgstr "(cho “porcelains”) quên các xung đột chưa được giải quyết đã ghi"
 
-#: builtin/update-index.c:793
+#: builtin/update-index.c:794
 msgid "write index in this format"
 msgstr "ghi mục lục ở định dạng này"
 
@@ -8573,7 +8607,7 @@ msgstr "chỉ hữu ích khi cần gỡ lỗi"
 #: git.c:16
 msgid "See 'git help <command>' for more information on a specific command."
 msgstr ""
-"Chạy lệnh `git help <tên-lệnh>' để có thêm thông tin về lệnh được chỉ ra."
+"Chạy lệnh “git help <tên-lệnh>” để có thêm thông tin về lệnh được chỉ ra."
 
 #: parse-options.h:156
 msgid "no-op (backward compatibility)"
@@ -8605,7 +8639,7 @@ msgstr "Liệt kê, tạo hay là xóa các nhánh"
 
 #: common-cmds.h:11
 msgid "Checkout a branch or paths to the working tree"
-msgstr "Checkout một nhánh hay các đường dẫn tới cây làm việc"
+msgstr "Lấy ra (checkout) một nhánh hay các đường dẫn tới cây làm việc"
 
 #: common-cmds.h:12
 msgid "Clone a repository into a new directory"
@@ -8636,7 +8670,7 @@ msgstr ""
 
 #: common-cmds.h:18
 msgid "Show commit logs"
-msgstr "hiển thị nhật ký các lần commit (chuyển giao)"
+msgstr "Hiển thị nhật ký các lần chuyển giao (commit)"
 
 #: common-cmds.h:19
 msgid "Join two or more development histories together"
@@ -8650,7 +8684,7 @@ msgstr "Di chuyển, đổi tên một tập tin, thư mục hay liên kết tư
 
 #: common-cmds.h:21
 msgid "Fetch from and merge with another repository or a local branch"
-msgstr "Fetch (lấy về) và hòa trộng với kho khác hay nhánh nội bộ"
+msgstr "Lấy về (fetch) và hòa trộn với kho khác hay nhánh nội bộ"
 
 #: common-cmds.h:22
 msgid "Update remote refs along with associated objects"
@@ -8693,7 +8727,7 @@ msgid ""
 "You seem to have moved HEAD since the last 'am' failure.\n"
 "Not rewinding to ORIG_HEAD"
 msgstr ""
-"Bạn có lẽ đã có HEAD đã bị di chuyển đi kể từ lần 'am' thất bại cuối cùng.\n"
+"Bạn có lẽ đã có HEAD đã bị di chuyển đi kể từ lần “am” thất bại cuối cùng.\n"
 "Không thể chuyển tới ORIG_HEAD"
 
 #: git-am.sh:105
@@ -8711,11 +8745,11 @@ msgstr ""
 
 #: git-am.sh:121
 msgid "Cannot fall back to three-way merge."
-msgstr "Đang trở lại để hòa trộn kiểu 'three-way'."
+msgstr "Đang trở lại để hòa trộn kiểu “three-way”."
 
 #: git-am.sh:137
 msgid "Repository lacks necessary blobs to fall back on 3-way merge."
-msgstr "Kho thiếu đối tượng blob cần thiết để trở về trên '3-way merge'."
+msgstr "Kho thiếu đối tượng blob cần thiết để trở về trên “3-way merge”."
 
 #: git-am.sh:139
 msgid "Using index info to reconstruct a base tree..."
@@ -8732,7 +8766,7 @@ msgstr ""
 
 #: git-am.sh:163
 msgid "Falling back to patching base and 3-way merge..."
-msgstr "Đang trở lại để vá cơ sở và '3-way merge'..."
+msgstr "Đang trở lại để vá cơ sở và “3-way merge”..."
 
 #: git-am.sh:179
 msgid "Failed to merge in the changes."
@@ -8824,7 +8858,7 @@ msgid ""
 "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 ""
-"Không có thay đổi nào - bạn đã quên sử dụng lệnh `git add' à?\n"
+"Không có thay đổi nào - bạn đã quên sử dụng lệnh “git add” à?\n"
 "Nếu ở đây không có gì còn lại stage, tình cờ là có một số thứ khác\n"
 "đã sẵn được đưa vào với cùng nội dung thay đổi; bạn có lẽ muốn bỏ qua miếng "
 "vá này."
@@ -8835,7 +8869,7 @@ msgid ""
 "did you forget to use 'git add'?"
 msgstr ""
 "Bạn vẫn có những đường dẫn chưa được hòa trộn trong bảng mục lục của mình\n"
-"bạn đã quên sử dụng lệnh `git add' à?"
+"bạn đã quên sử dụng lệnh “git add” à?"
 
 #: git-am.sh:845
 msgid "No changes -- Patch already applied."
@@ -8873,12 +8907,12 @@ msgstr "Bạn có muốn tôi thực hiện điều này cho bạn không [Y/n]?
 #: git-bisect.sh:95
 #, sh-format
 msgid "unrecognised option: '$arg'"
-msgstr "không công nhận tùy chọn: '$arg'"
+msgstr "không công nhận tùy chọn: “$arg”"
 
 #: git-bisect.sh:99
 #, sh-format
 msgid "'$arg' does not appear to be a valid revision"
-msgstr "'$arg' không có vẻ như là một sự xét lại hợp lệ"
+msgstr "”$arg” không có vẻ như là một sự xét lại hợp lệ"
 
 #: git-bisect.sh:117
 msgid "Bad HEAD - I need a HEAD"
@@ -8889,8 +8923,8 @@ msgstr "HEAD sai - Tôi cần một HEAD"
 msgid ""
 "Checking out '$start_head' failed. Try 'git bisect reset <validbranch>'."
 msgstr ""
-"Việc checkout '$start_head' gặp lỗi. Hãy thử `git bisect reset "
-"<nhánh_hợp_lệ>'."
+"Việc checkout “$start_head” gặp lỗi. Hãy thử “git bisect reset "
+"<nhánh_hợp_lệ>."
 
 #: git-bisect.sh:140
 msgid "won't bisect on seeked tree"
@@ -8912,7 +8946,7 @@ msgstr "Đầu vào rev sai: $arg"
 
 #: git-bisect.sh:232
 msgid "Please call 'bisect_state' with at least one argument."
-msgstr "Hãy gọi lệnhl 'bisect_state' với ít nhất một đối số."
+msgstr "Hãy gọi lệnhl “bisect_state” với ít nhất một đối số."
 
 #: git-bisect.sh:244
 #, sh-format
@@ -8921,7 +8955,7 @@ msgstr "Đầu vào rev sai: $rev"
 
 #: git-bisect.sh:250
 msgid "'git bisect bad' can take only one argument."
-msgstr "`git bisect bad' có thể lấy chỉ một đối số."
+msgstr "“git bisect bad” có thể lấy chỉ một đối số."
 
 #. have bad but not good.  we could bisect although
 #. this is less optimum.
@@ -8963,7 +8997,7 @@ msgstr "Chúng tôi không bisect."
 #: git-bisect.sh:354
 #, sh-format
 msgid "'$invalid' is not a valid commit"
-msgstr "'$invalid' không phải là lần chuyển giao (commit) hợp lệ"
+msgstr "”$invalid” không phải là lần chuyển giao (commit) hợp lệ"
 
 #: git-bisect.sh:363
 #, sh-format
@@ -8971,8 +9005,8 @@ msgid ""
 "Could not check out original HEAD '$branch'.\n"
 "Try 'git bisect reset <commit>'."
 msgstr ""
-"Không thể check-out HEAD nguyên thủy của '$branch'.\n"
-"Hãy thử `git bisect reset <lần-chuyển-giao>'."
+"Không thể check-out HEAD nguyên thủy của “$branch”.\n"
+"Hãy thử “git bisect reset <lần-chuyển-giao>”."
 
 #: git-bisect.sh:390
 msgid "No logfile given"
@@ -8999,7 +9033,7 @@ msgid ""
 "exit code $res from '$command' is < 0 or >= 128"
 msgstr ""
 "chạy bisect gặp lỗi:\n"
-"mã trả về $res từ lệnh '$command' là < 0 hoặc >= 128"
+"mã trả về $res từ lệnh “$command” là < 0 hoặc >= 128"
 
 #: git-bisect.sh:453
 msgid "bisect run cannot continue any more"
@@ -9012,7 +9046,7 @@ msgid ""
 "'bisect_state $state' exited with error code $res"
 msgstr ""
 "chạy bisect gặp lỗi:\n"
-"'bisect_state $state' đã thoát ra với mã lỗi $res"
+"”bisect_state $state” đã thoát ra với mã lỗi $res"
 
 #: git-bisect.sh:466
 msgid "bisect run success"
@@ -9025,9 +9059,9 @@ msgid ""
 "as appropriate to mark resolution, or use 'git commit -a'."
 msgstr ""
 "Pull là không thể được bởi vì bạn có những tập tin chưa được hòa trộn.\n"
-"Xin hãy sửa chữa chúng trước, và sau đó sử dụng lệnh `git add/rm <tập-tin>'\n"
-"để phê chuẩn việc đánh dấu đây cần được giải quyết, hoặc là sử dụng `git "
-"commit -a'."
+"Xin hãy sửa chữa chúng trước, và sau đó sử dụng lệnh “git add/rm <tập-tin>”\n"
+"để phê chuẩn việc đánh dấu đây cần được giải quyết, hoặc là sử dụng git "
+"commit -a."
 
 #: git-pull.sh:25
 msgid "Pull is not possible because you have unmerged files."
@@ -9044,7 +9078,7 @@ msgstr ""
 #. The working tree and the index file is still based on the
 #. $orig_head commit, but we are merging into $curr_head.
 #. First update the working tree to match $curr_head.
-#: git-pull.sh:228
+#: git-pull.sh:229
 #, sh-format
 msgid ""
 "Warning: fetch updated the current branch head.\n"
@@ -9055,11 +9089,11 @@ msgstr ""
 "Cảnh báo: đang fast-forward cây làm việc của bạn từ\n"
 "Cảnh báo: commit $orig_head."
 
-#: git-pull.sh:253
+#: git-pull.sh:254
 msgid "Cannot merge multiple branches into empty head"
 msgstr "Không thể hòa trộn nhiều nhánh và trong một head trống rỗng"
 
-#: git-pull.sh:257
+#: git-pull.sh:258
 msgid "Cannot rebase onto multiple branches"
 msgstr "Không thể thực hiện lệnh rebase (cơ cấu lại) trên nhiều nhánh"
 
@@ -9078,7 +9112,7 @@ msgstr ""
 
 #: git-rebase.sh:160
 msgid "The pre-rebase hook refused to rebase."
-msgstr "hook (chương trình móc vào git) pre-rebase từ chối rebase."
+msgstr "Móc (hook) pre-rebase từ chối rebase."
 
 #: git-rebase.sh:165
 msgid "It looks like git-am is in progress. Cannot rebase."
@@ -9097,7 +9131,7 @@ msgstr "Không có tiến trình rebase nào phải không?"
 #: git-rebase.sh:312
 msgid "The --edit-todo action can only be used during interactive rebase."
 msgstr ""
-"Hành động `--edit-todo' chỉ có thể dùng trong quá trình `rebase' (sửa lịch "
+"Hành động “--edit-todo” chỉ có thể dùng trong quá trình “rebase” (sửa lịch "
 "sử) tương tác."
 
 #: git-rebase.sh:319
@@ -9148,12 +9182,12 @@ msgstr "thượng nguồn không hợp lệ $upstream_name"
 #: git-rebase.sh:428
 #, sh-format
 msgid "$onto_name: there are more than one merge bases"
-msgstr "$onto_name: ở đây có nhiều hơn một"
+msgstr "$onto_name: ở đây có nhiều hơn một nền móng hòa trộn"
 
 #: git-rebase.sh:431 git-rebase.sh:435
 #, sh-format
 msgid "$onto_name: there is no merge base"
-msgstr "$onto_name: ở đây không có gì để hòa trộn"
+msgstr "$onto_name: ở đây không có nền móng hòa trộn nào"
 
 #: git-rebase.sh:440
 #, sh-format
@@ -9167,7 +9201,7 @@ msgstr "nghiêm trọng: không có nhánh như thế: $branch_name"
 
 #: git-rebase.sh:483
 msgid "Please commit or stash them."
-msgstr "Xin hãy commit hoặc stash chúng."
+msgstr "Xin hãy commit hoặc tạm cất (stash) chúng."
 
 #: git-rebase.sh:501
 #, sh-format
@@ -9240,8 +9274,8 @@ msgid ""
 "error: unknown option for 'stash save': $option\n"
 "       To provide a message, use git stash save -- '$option'"
 msgstr ""
-"lỗi: không hiểu tùy chọn cho 'stash save': $option\n"
-"       Để cung cấp một thông điệp, sử dụng git stash save -- '$option'"
+"lỗi: không hiểu tùy chọn cho “stash save”: $option\n"
+"       Để cung cấp một thông điệp, sử dụng git stash save -- “$option”"
 
 #: git-stash.sh:223
 msgid "No local changes to save"
@@ -9276,12 +9310,12 @@ msgstr "$reference không phải là tham chiếu hợp lệ"
 #: git-stash.sh:393
 #, sh-format
 msgid "'$args' is not a stash-like commit"
-msgstr "'$args' không phải là lần chuyển giao (commit) giống-stash"
+msgstr "”$args” không phải là lần chuyển giao (commit) giống-stash"
 
 #: git-stash.sh:404
 #, sh-format
 msgid "'$args' is not a stash reference"
-msgstr "'$args' không phải tham chiếu đến stash"
+msgstr "”$args” không phải tham chiếu đến stash"
 
 #: git-stash.sh:412
 msgid "unable to refresh index"
@@ -9325,41 +9359,41 @@ msgstr "Chưa chỉ ra tên của nhánh"
 msgid "(To restore them type \"git stash apply\")"
 msgstr "(Để phục hồi lại chúng hãy gõ \"git stash apply\")"
 
-#: git-submodule.sh:88
+#: git-submodule.sh:89
 #, sh-format
 msgid "cannot strip one component off url '$remoteurl'"
-msgstr "không thể tháo bỏ một thành phần ra khỏi url '$remoteurl'"
+msgstr "không thể tháo bỏ một thành phần ra khỏi “$remoteurl” url"
 
-#: git-submodule.sh:167
+#: git-submodule.sh:168
 #, sh-format
 msgid "No submodule mapping found in .gitmodules for path '$sm_path'"
 msgstr ""
 "Không tìm thấy ánh xạ (mapping) mô-đun-con trong .gitmodules cho đường dẫn "
-"'$sm_path'"
+"“$sm_path”"
 
 #: git-submodule.sh:211
 #, sh-format
 msgid "Clone of '$url' into submodule path '$sm_path' failed"
-msgstr "Nhân bản '$url' vào đường dẫn mô-đun-con '$sm_path' gặp lỗi"
+msgstr "Nhân bản “$url” vào đường dẫn mô-đun-con “$sm_path” gặp lỗi"
 
 #: git-submodule.sh:223
 #, sh-format
 msgid "Gitdir '$a' is part of the submodule path '$b' or vice versa"
 msgstr ""
-"Gitdir '$a' là bộ phận của đường dẫn mô-đun-con '$b' hoặc \"vice versa\""
+"Gitdir “$a” là bộ phận của đường dẫn mô-đun-con “$b” hoặc \"vice versa\""
 
-#: git-submodule.sh:312
+#: git-submodule.sh:316
 #, sh-format
 msgid "repo URL: '$repo' must be absolute or begin with ./|../"
 msgstr ""
-"repo URL: '$repo' phải là đường dẫn tuyệt đối hoặc là bắt đầu bằng ./|../"
+"repo URL: “$repo” phải là đường dẫn tuyệt đối hoặc là bắt đầu bằng ./|../"
 
-#: git-submodule.sh:329
+#: git-submodule.sh:333
 #, sh-format
 msgid "'$sm_path' already exists in the index"
-msgstr "'$sm_path' thực sự đã tồn tại ở bảng mục lục rồi"
+msgstr "”$sm_path” thực sự đã tồn tại ở bảng mục lục rồi"
 
-#: git-submodule.sh:333
+#: git-submodule.sh:337
 #, sh-format
 msgid ""
 "The following path is ignored by one of your .gitignore files:\n"
@@ -9371,162 +9405,196 @@ msgstr ""
 "$sm_path\n"
 "Sử dụng -f nếu bạn thực sự muốn thêm nó vào."
 
-#: git-submodule.sh:344
+#: git-submodule.sh:355
 #, sh-format
 msgid "Adding existing repo at '$sm_path' to the index"
-msgstr "Đang thêm repo có sẵn tại '$sm_path' vào bảng mục lục"
+msgstr "Đang thêm repo có sẵn tại “$sm_path” vào bảng mục lục"
 
-#: git-submodule.sh:346
+#: git-submodule.sh:357
 #, sh-format
 msgid "'$sm_path' already exists and is not a valid git repo"
-msgstr "'$sm_path' đã tồn tại từ trước và không phải là một kho git hợp lệ"
+msgstr "”$sm_path” đã tồn tại từ trước và không phải là một kho git hợp lệ"
+
+#: git-submodule.sh:365
+#, sh-format
+msgid "A git directory for '$sm_name' is found locally with remote(s):"
+msgstr ""
+"Thư mục git cho '$sm_name' được tìm thấy một cách cục bộ với các máy chủ:"
+
+#: git-submodule.sh:367
+#, sh-format
+msgid ""
+"If you want to reuse this local git directory instead of cloning again from"
+msgstr "Nếu bạn muốn dùng lại thư mục git nội bộ này thay vì nhân bản từ nó"
 
-#: git-submodule.sh:360
+#: git-submodule.sh:369
+#, sh-format
+msgid ""
+"use the '--force' option. If the local git directory is not the correct repo"
+msgstr ""
+"dùng tùy chọn '--force'. Nếu thư mục git nội bộ không phải là repo (kho) đúng"
+
+#: git-submodule.sh:370
+#, sh-format
+msgid ""
+"or you are unsure what this means choose another name with the '--name' "
+"option."
+msgstr ""
+"hay bạn không chắc chắn điều đó có nghĩa gì chọn tên khác với tùy chọn '--"
+"name'."
+
+#: git-submodule.sh:372
+#, sh-format
+msgid "Reactivating local git directory for submodule '$sm_name'."
+msgstr ""
+"Phục hồi sự hoạt động của thư mục git nội bộ cho mô-đun-con '$sm_name'."
+
+#: git-submodule.sh:384
 #, sh-format
 msgid "Unable to checkout submodule '$sm_path'"
-msgstr "Không thể checkout mô-đun con '$sm_path'"
+msgstr "Không thể checkout mô-đun con “$sm_path”"
 
-#: git-submodule.sh:365
+#: git-submodule.sh:389
 #, sh-format
 msgid "Failed to add submodule '$sm_path'"
-msgstr "Gặp lỗi khi thêm mô-đun con '$sm_path'"
+msgstr "Gặp lỗi khi thêm mô-đun con “$sm_path”"
 
-#: git-submodule.sh:370
+#: git-submodule.sh:394
 #, sh-format
 msgid "Failed to register submodule '$sm_path'"
-msgstr "Gặp lỗi khi đăng ký với hệ thống mô-đun con '$sm_path'"
+msgstr "Gặp lỗi khi đăng ký với hệ thống mô-đun con “$sm_path”"
 
-#: git-submodule.sh:413
+#: git-submodule.sh:437
 #, sh-format
 msgid "Entering '$prefix$sm_path'"
-msgstr "Đang nhập '$prefix$sm_path'"
+msgstr "Đang nhập “$prefix$sm_path”"
 
-#: git-submodule.sh:427
+#: git-submodule.sh:451
 #, sh-format
 msgid "Stopping at '$sm_path'; script returned non-zero status."
-msgstr "Dừng lại tại '$sm_path'; script trả về trạng thái khác không."
+msgstr "Dừng lại tại “$sm_path”; script trả về trạng thái khác không."
 
-#: git-submodule.sh:471
+#: git-submodule.sh:495
 #, sh-format
 msgid "No url found for submodule path '$sm_path' in .gitmodules"
 msgstr ""
-"Không tìm thấy url cho đường dẫn mô-đun-con '$sm_path' trong .gitmodules"
+"Không tìm thấy url cho đường dẫn mô-đun-con “$sm_path” trong .gitmodules"
 
-#: git-submodule.sh:480
+#: git-submodule.sh:504
 #, sh-format
 msgid "Failed to register url for submodule path '$sm_path'"
-msgstr "Gặp lỗi khi đăng ký url cho đường dẫn mô-đun-con '$sm_path'"
+msgstr "Gặp lỗi khi đăng ký url cho đường dẫn mô-đun-con “$sm_path”"
 
-#: git-submodule.sh:482
+#: git-submodule.sh:506
 #, sh-format
 msgid "Submodule '$name' ($url) registered for path '$sm_path'"
-msgstr "Mô-đun-con '$name' ($url) được đăng ký cho đường dẫn '$sm_path'"
+msgstr "Mô-đun-con “$name” ($url) được đăng ký cho đường dẫn “$sm_path”"
 
-#: git-submodule.sh:490
+#: git-submodule.sh:514
 #, sh-format
 msgid "Failed to register update mode for submodule path '$sm_path'"
 msgstr ""
-"Gặp lỗi khi đăng ký chế độ cập nhật cho đường dẫn mô-đun-con '$sm_path'"
+"Gặp lỗi khi đăng ký chế độ cập nhật cho đường dẫn mô-đun-con “$sm_path”"
 
-#: git-submodule.sh:590
+#: git-submodule.sh:614
 #, sh-format
 msgid ""
 "Submodule path '$sm_path' not initialized\n"
 "Maybe you want to use 'update --init'?"
 msgstr ""
-"Đường dẫn mô-đun-con '$sm_path' chưa được khởi tạo\n"
-"Có lẽ bạn muốn sử dụng lệnh 'update --init'?"
+"Đường dẫn mô-đun-con “$sm_path” chưa được khởi tạo\n"
+"Có lẽ bạn muốn sử dụng lệnh “update --init”?"
 
-#: git-submodule.sh:603
+#: git-submodule.sh:627
 #, sh-format
 msgid "Unable to find current revision in submodule path '$sm_path'"
 msgstr ""
-"Không tìm thấy điểm xét lại hiện hành trong đường dẫn mô-đun-con '$sm_path'"
+"Không tìm thấy điểm xét lại hiện hành trong đường dẫn mô-đun-con “$sm_path”"
 
-#: git-submodule.sh:622
+#: git-submodule.sh:646
 #, sh-format
 msgid "Unable to fetch in submodule path '$sm_path'"
-msgstr "Không thể lấy về (fetch) trong đường dẫn mô-đun-con '$sm_path'"
+msgstr "Không thể lấy về (fetch) trong đường dẫn mô-đun-con “$sm_path”"
 
-#: git-submodule.sh:636
+#: git-submodule.sh:660
 #, sh-format
 msgid "Unable to rebase '$sha1' in submodule path '$sm_path'"
-msgstr "Không thể rebase '$sha1' trong đường dẫn mô-đun-con '$sm_path'"
+msgstr "Không thể rebase “$sha1” trong đường dẫn mô-đun-con “$sm_path”"
 
-#: git-submodule.sh:637
+#: git-submodule.sh:661
 #, sh-format
 msgid "Submodule path '$sm_path': rebased into '$sha1'"
-msgstr "Đường dẫn mô-đun-con '$sm_path': được rebase vào trong '$sha1'"
+msgstr "Đường dẫn mô-đun-con “$sm_path”: được rebase vào trong “$sha1”"
 
-#: git-submodule.sh:642
+#: git-submodule.sh:666
 #, sh-format
 msgid "Unable to merge '$sha1' in submodule path '$sm_path'"
 msgstr ""
-"Không thể hòa trộn (merge) '$sha1' trong đường dẫn mô-đun-con '$sm_path'"
+"Không thể hòa trộn (merge) “$sha1” trong đường dẫn mô-đun-con “$sm_path”"
 
-#: git-submodule.sh:643
+#: git-submodule.sh:667
 #, sh-format
 msgid "Submodule path '$sm_path': merged in '$sha1'"
-msgstr "Đường dẫn mô-đun-con '$sm_path': được hòa trộn vào '$sha1'"
+msgstr "Đường dẫn mô-đun-con “$sm_path”: được hòa trộn vào “$sha1”"
 
-#: git-submodule.sh:648
+#: git-submodule.sh:672
 #, sh-format
 msgid "Unable to checkout '$sha1' in submodule path '$sm_path'"
-msgstr "Không thể checkout '$sha1' trong đường dẫn mô-đun-con '$sm_path'"
+msgstr "Không thể checkout “$sha1” trong đường dẫn mô-đun-con “$sm_path”"
 
-#: git-submodule.sh:649
+#: git-submodule.sh:673
 #, sh-format
 msgid "Submodule path '$sm_path': checked out '$sha1'"
-msgstr "Đường dẫn mô-đun-con '$sm_path': được checkout '$sha1'"
+msgstr "Đường dẫn mô-đun-con “$sm_path”: được checkout “$sha1”"
 
-#: git-submodule.sh:671 git-submodule.sh:995
+#: git-submodule.sh:695 git-submodule.sh:1017
 #, sh-format
 msgid "Failed to recurse into submodule path '$sm_path'"
-msgstr "Gặp lỗi khi đệ quy vào trong đường dẫn mô-đun-con '$sm_path'"
+msgstr "Gặp lỗi khi đệ quy vào trong đường dẫn mô-đun-con “$sm_path”"
 
-#: git-submodule.sh:779
+#: git-submodule.sh:803
 msgid "The --cached option cannot be used with the --files option"
 msgstr "Tùy chọn --cached không thể dùng cùng với tùy chọn --files"
 
 #. unexpected type
-#: git-submodule.sh:819
+#: git-submodule.sh:843
 #, sh-format
 msgid "unexpected mode $mod_dst"
 msgstr "chế độ không như mong chờ $mod_dst"
 
-#: git-submodule.sh:837
+#: git-submodule.sh:861
 #, sh-format
 msgid "  Warn: $name doesn't contain commit $sha1_src"
 msgstr "  Cảnh báo: $name không chứa lần chuyển giao (commit) $sha1_src"
 
-#: git-submodule.sh:840
+#: git-submodule.sh:864
 #, sh-format
 msgid "  Warn: $name doesn't contain commit $sha1_dst"
 msgstr "  Cảnh báo: $name không chứa lần chuyển giao (commit) $sha1_dst"
 
-#: git-submodule.sh:843
+#: git-submodule.sh:867
 #, sh-format
 msgid "  Warn: $name doesn't contain commits $sha1_src and $sha1_dst"
 msgstr ""
 "  Cảnh báo: $name không chứa những lần chuyển giao (commit) $sha1_src và "
 "$sha1_dst"
 
-#: git-submodule.sh:868
+#: git-submodule.sh:892
 msgid "blob"
 msgstr "blob"
 
-#: git-submodule.sh:906
+#: git-submodule.sh:930
 msgid "# Submodules changed but not updated:"
-msgstr "# Những mô-đun-con đã bị thay đổi nhưng chưa được cập nhật:"
+msgstr "# Các mô-đun-con đã bị thay đổi nhưng chưa được cập nhật:"
 
-#: git-submodule.sh:908
+#: git-submodule.sh:932
 msgid "# Submodule changes to be committed:"
 msgstr "# Những thay đổi mô-đun-con được chuyển giao (commit):"
 
-#: git-submodule.sh:1054
+#: git-submodule.sh:1080
 #, sh-format
-msgid "Synchronizing submodule url for '$name'"
-msgstr "Đang đồng bộ hóa url mô-đun-con cho '$name'"
+msgid "Synchronizing submodule url for '$prefix$sm_path'"
+msgstr "Url Mô-đun-con đồng bộ hóa cho '$prefix$sm_path'"
 
 #~ msgid " 0 files changed"
 #~ msgstr " 0 có tập tin nào thay đổi cả"
@@ -9595,7 +9663,7 @@ msgstr "Đang đồng bộ hóa url mô-đun-con cho '$name'"
 #~ msgstr "%s: đã được xóa/thay-tên"
 
 #~ msgid "'%s': not a documentation directory."
-#~ msgstr "'%s': không phải là một thư mục tài liệu."
+#~ msgstr "”%s”: không phải là một thư mục tài liệu."
 
 #~ msgid "--"
 #~ msgstr "--"
@@ -9604,10 +9672,5 @@ msgstr "Đang đồng bộ hóa url mô-đun-con cho '$name'"
 #~ msgstr ""
 #~ "Không thể rút trích địa chỉ thư điện tử từ định danh người chuyển giao"
 
-#, fuzzy
 #~ msgid "could not parse commit %s\n"
-#~ msgstr "Không thể phân tích commit (lần chuyển giao) %s\n"
-
-#, fuzzy
-#~ msgid "cherry-pick"
-#~ msgstr "< Chọn D-Mod"
+#~ msgstr "không thể phân tích commit (lần chuyển giao) %s\n"
index 5882d11a8d57f060fdee6a79b70e230c530363c3..b6a768e2605038ff4c85a0a115b8571013cc7d05 100644 (file)
--- a/remote.c
+++ b/remote.c
@@ -1627,13 +1627,15 @@ int format_tracking_info(struct branch *branch, struct strbuf *sb)
 
        base = branch->merge[0]->dst;
        base = shorten_unambiguous_ref(base, 0);
-       if (!num_theirs)
+       if (!num_theirs) {
                strbuf_addf(sb,
                        Q_("Your branch is ahead of '%s' by %d commit.\n",
                           "Your branch is ahead of '%s' by %d commits.\n",
                           num_ours),
                        base, num_ours);
-       else if (!num_ours)
+               strbuf_addf(sb,
+                       _("  (use \"git push\" to publish your local commits)\n"));
+       } else if (!num_ours) {
                strbuf_addf(sb,
                        Q_("Your branch is behind '%s' by %d commit, "
                               "and can be fast-forwarded.\n",
@@ -1641,7 +1643,9 @@ int format_tracking_info(struct branch *branch, struct strbuf *sb)
                               "and can be fast-forwarded.\n",
                           num_theirs),
                        base, num_theirs);
-       else
+               strbuf_addf(sb,
+                       _("  (use \"git pull\" to update your local branch)\n"));
+       } else {
                strbuf_addf(sb,
                        Q_("Your branch and '%s' have diverged,\n"
                               "and have %d and %d different commit each, "
@@ -1651,6 +1655,9 @@ int format_tracking_info(struct branch *branch, struct strbuf *sb)
                               "respectively.\n",
                           num_theirs),
                        base, num_ours, num_theirs);
+               strbuf_addf(sb,
+                       _("  (use \"git pull\" to merge the remote branch into yours)\n"));
+       }
        return 1;
 }
 
index 08677df10e9d2a4c87fbe1e5d24eb836b1117e64..562cf41cad7b0532ab4a15625950720c71549742 100755 (executable)
@@ -115,6 +115,38 @@ then
        exit 1
 fi
 
+test_lazy_prereq LAZY_TRUE true
+havetrue=no
+test_expect_success LAZY_TRUE 'test runs if lazy prereq is satisfied' '
+       havetrue=yes
+'
+donthavetrue=yes
+test_expect_success !LAZY_TRUE 'missing lazy prereqs skip tests' '
+       donthavetrue=no
+'
+
+if test "$havetrue$donthavetrue" != yesyes
+then
+       say 'bug in test framework: lazy prerequisites do not work'
+       exit 1
+fi
+
+test_lazy_prereq LAZY_FALSE false
+nothavefalse=no
+test_expect_success !LAZY_FALSE 'negative lazy prereqs checked' '
+       nothavefalse=yes
+'
+havefalse=yes
+test_expect_success LAZY_FALSE 'missing negative lazy prereqs will skip' '
+       havefalse=no
+'
+
+if test "$nothavefalse$havefalse" != yesyes
+then
+       say 'bug in test framework: negative lazy prerequisites do not work'
+       exit 1
+fi
+
 clean=no
 test_expect_success 'tests clean up after themselves' '
        test_when_finished clean=yes
diff --git a/t/t0007-git-var.sh b/t/t0007-git-var.sh
new file mode 100755 (executable)
index 0000000..5868a87
--- /dev/null
@@ -0,0 +1,49 @@
+#!/bin/sh
+
+test_description='basic sanity checks for git var'
+. ./test-lib.sh
+
+test_expect_success 'get GIT_AUTHOR_IDENT' '
+       test_tick &&
+       echo "$GIT_AUTHOR_NAME <$GIT_AUTHOR_EMAIL> $GIT_AUTHOR_DATE" >expect &&
+       git var GIT_AUTHOR_IDENT >actual &&
+       test_cmp expect actual
+'
+
+test_expect_success 'get GIT_COMMITTER_IDENT' '
+       test_tick &&
+       echo "$GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE" >expect &&
+       git var GIT_COMMITTER_IDENT >actual &&
+       test_cmp expect actual
+'
+
+test_expect_success !AUTOIDENT 'requested identites are strict' '
+       (
+               sane_unset GIT_COMMITTER_NAME &&
+               sane_unset GIT_COMMITTER_EMAIL &&
+               test_must_fail git var GIT_COMMITTER_IDENT
+       )
+'
+
+# For git var -l, we check only a representative variable;
+# testing the whole output would make our test too brittle with
+# respect to unrelated changes in the test suite's environment.
+test_expect_success 'git var -l lists variables' '
+       git var -l >actual &&
+       echo "$GIT_AUTHOR_NAME <$GIT_AUTHOR_EMAIL> $GIT_AUTHOR_DATE" >expect &&
+       sed -n s/GIT_AUTHOR_IDENT=//p <actual >actual.author &&
+       test_cmp expect actual.author
+'
+
+test_expect_success 'git var -l lists config' '
+       git var -l >actual &&
+       echo false >expect &&
+       sed -n s/core\\.bare=//p <actual >actual.bare &&
+       test_cmp expect actual.bare
+'
+
+test_expect_success 'listing and asking for variables are exclusive' '
+       test_must_fail git var -l GIT_COMMITTER_IDENT
+'
+
+test_done
index 81005373d728f09e1a9289048cc721a0300f1cf9..5d68729d7a65abde09d1293e8569b730d2ba9a40 100755 (executable)
@@ -151,6 +151,7 @@ test_expect_success 'checkout does not warn leaving reachable commit' '
 
 cat >expect <<'EOF'
 Your branch is behind 'master' by 1 commit, and can be fast-forwarded.
+  (use "git pull" to update your local branch)
 EOF
 test_expect_success 'tracking count is accurate after orphan check' '
        reset &&
index 97254e8d337ff066f633ece5d1a7c8a59108e703..06f63848eab384ae33eacd1fb46d5dc048143721 100755 (executable)
@@ -302,6 +302,23 @@ test_expect_success 'rm removes work tree of unmodified submodules' '
        test_cmp expect actual
 '
 
+test_expect_success 'rm removes a submodule with a trailing /' '
+       git reset --hard &&
+       git submodule update &&
+       git rm submod/ &&
+       test ! -d submod &&
+       git status -s -uno --ignore-submodules=none > actual &&
+       test_cmp expect actual
+'
+
+test_expect_success 'rm fails when given a file with a trailing /' '
+       test_must_fail git rm empty/
+'
+
+test_expect_success 'rm succeeds when given a directory with a trailing /' '
+       git rm -r frotz/
+'
+
 test_expect_success 'rm of a populated submodule with different HEAD fails unless forced' '
        git reset --hard &&
        git submodule update &&
index 461d27ac202cc51f1f09b7a18de8b747198700e4..53ec330ce8a09cfde5b3b5e7661bb6dd457ba0db 100755 (executable)
@@ -96,6 +96,18 @@ test_expect_success 'grep-diff (-G) operates on textconv data (modification)' '
        test_cmp expect actual
 '
 
+test_expect_success 'pickaxe (-S) operates on textconv data (add)' '
+       echo one >expect &&
+       git log --root --format=%s -S0 >actual &&
+       test_cmp expect actual
+'
+
+test_expect_success 'pickaxe (-S) operates on textconv data (modification)' '
+       echo two >expect &&
+       git log --root --format=%s -S1 >actual &&
+       test_cmp expect actual
+'
+
 cat >expect.stat <<'EOF'
  file | Bin 2 -> 4 bytes
  1 file changed, 0 insertions(+), 0 deletions(-)
index deb187eb7b4277a43f46e73c1d85012b728ce14a..1a5cb6983c527b6d3e1ad6fad427d3513e8704b1 100755 (executable)
@@ -243,16 +243,6 @@ test_expect_success 'message shows author when it is not equal to committer' '
          .git/COMMIT_EDITMSG
 '
 
-test_expect_success 'setup auto-ident prerequisite' '
-       if (sane_unset GIT_COMMITTER_EMAIL &&
-           sane_unset GIT_COMMITTER_NAME &&
-           git var GIT_COMMITTER_IDENT); then
-               test_set_prereq AUTOIDENT
-       else
-               test_set_prereq NOAUTOIDENT
-       fi
-'
-
 test_expect_success AUTOIDENT 'message shows committer when it is automatic' '
 
        echo >>negative &&
@@ -271,7 +261,7 @@ echo editor started > "$(pwd)/.git/result"
 exit 0
 EOF
 
-test_expect_success NOAUTOIDENT 'do not fire editor when committer is bogus' '
+test_expect_success !AUTOIDENT 'do not fire editor when committer is bogus' '
        >.git/result
        >expect &&
 
index 6c6af7d13f80bdc582e1d45558c24174a5800a38..97d6f4c7de57c54adfd5fed6401dbd168b5f3064 100755 (executable)
@@ -191,17 +191,44 @@ test_expect_success $PREREQ 'Show all headers' '
 
 test_expect_success $PREREQ 'Prompting works' '
        clean_fake_sendmail &&
-       (echo "Example <from@example.com>"
-        echo "to@example.com"
+       (echo "to@example.com"
         echo ""
        ) | GIT_SEND_EMAIL_NOTTY=1 git send-email \
                --smtp-server="$(pwd)/fake.sendmail" \
                $patches \
                2>errors &&
-               grep "^From: Example <from@example.com>\$" msgtxt1 &&
+               grep "^From: A U Thor <author@example.com>\$" msgtxt1 &&
                grep "^To: to@example.com\$" msgtxt1
 '
 
+test_expect_success $PREREQ,AUTOIDENT 'implicit ident is allowed' '
+       clean_fake_sendmail &&
+       (sane_unset GIT_AUTHOR_NAME &&
+       sane_unset GIT_AUTHOR_EMAIL &&
+       sane_unset GIT_COMMITTER_NAME &&
+       sane_unset GIT_COMMITTER_EMAIL &&
+       GIT_SEND_EMAIL_NOTTY=1 git send-email \
+               --smtp-server="$(pwd)/fake.sendmail" \
+               --to=to@example.com \
+               $patches </dev/null 2>errors
+       )
+'
+
+test_expect_success $PREREQ,!AUTOIDENT 'broken implicit ident aborts send-email' '
+       clean_fake_sendmail &&
+       (sane_unset GIT_AUTHOR_NAME &&
+       sane_unset GIT_AUTHOR_EMAIL &&
+       sane_unset GIT_COMMITTER_NAME &&
+       sane_unset GIT_COMMITTER_EMAIL &&
+       GIT_SEND_EMAIL_NOTTY=1 && export GIT_SEND_EMAIL_NOTTY &&
+       test_must_fail git send-email \
+               --smtp-server="$(pwd)/fake.sendmail" \
+               --to=to@example.com \
+               $patches </dev/null 2>errors &&
+       test_i18ngrep "tell me who you are" errors
+       )
+'
+
 test_expect_success $PREREQ 'tocmd works' '
        clean_fake_sendmail &&
        cp $patches tocmd.patch &&
index 8fa025f9d4e373e222d3aff6ca54d17a4eb00e2b..3cd53f87fb70443bc51bfec13d92a82d7f73ec7c 100755 (executable)
@@ -54,105 +54,78 @@ run_completion ()
        __git_wrap__git_main && print_comp
 }
 
+# Test high-level completion
+# Arguments are:
+# 1: typed text so far (cur)
+# 2: expected completion
 test_completion ()
 {
-       test $# -gt 1 && echo "$2" > expected
-       run_completion "$@" &&
+       if test $# -gt 1
+       then
+               printf '%s\n' "$2" >expected
+       else
+               sed -e 's/Z$//' >expected
+       fi &&
+       run_completion "$1" &&
        test_cmp expected out
 }
 
-# Like test_completion, but reads expectation from stdin,
-# which is convenient when it is multiline. We also process "_" into
-# spaces to make test vectors more readable.
-test_completion_long ()
+# Test __gitcomp.
+# The first argument is the typed text so far (cur); the rest are
+# passed to __gitcomp.  Expected output comes is read from the
+# standard input, like test_completion().
+test_gitcomp ()
 {
-       tr _ " " >expected &&
-       test_completion "$1"
+       local -a COMPREPLY &&
+       sed -e 's/Z$//' >expected &&
+       cur="$1" &&
+       shift &&
+       __gitcomp "$@" &&
+       print_comp &&
+       test_cmp expected out
 }
 
-newline=$'\n'
-
 test_expect_success '__gitcomp - trailing space - options' '
-       sed -e "s/Z$//" >expected <<-\EOF &&
+       test_gitcomp "--re" "--dry-run --reuse-message= --reedit-message=
+               --reset-author" <<-EOF
        --reuse-message=Z
        --reedit-message=Z
        --reset-author Z
        EOF
-       (
-               local -a COMPREPLY &&
-               cur="--re" &&
-               __gitcomp "--dry-run --reuse-message= --reedit-message=
-                               --reset-author" &&
-               IFS="$newline" &&
-               echo "${COMPREPLY[*]}" > out
-       ) &&
-       test_cmp expected out
 '
 
 test_expect_success '__gitcomp - trailing space - config keys' '
-       sed -e "s/Z$//" >expected <<-\EOF &&
+       test_gitcomp "br" "branch. branch.autosetupmerge
+               branch.autosetuprebase browser." <<-\EOF
        branch.Z
        branch.autosetupmerge Z
        branch.autosetuprebase Z
        browser.Z
        EOF
-       (
-               local -a COMPREPLY &&
-               cur="br" &&
-               __gitcomp "branch. branch.autosetupmerge
-                               branch.autosetuprebase browser." &&
-               IFS="$newline" &&
-               echo "${COMPREPLY[*]}" > out
-       ) &&
-       test_cmp expected out
 '
 
 test_expect_success '__gitcomp - option parameter' '
-       sed -e "s/Z$//" >expected <<-\EOF &&
+       test_gitcomp "--strategy=re" "octopus ours recursive resolve subtree" \
+               "" "re" <<-\EOF
        recursive Z
        resolve Z
        EOF
-       (
-               local -a COMPREPLY &&
-               cur="--strategy=re" &&
-               __gitcomp "octopus ours recursive resolve subtree
-                       " "" "re" &&
-               IFS="$newline" &&
-               echo "${COMPREPLY[*]}" > out
-       ) &&
-       test_cmp expected out
 '
 
 test_expect_success '__gitcomp - prefix' '
-       sed -e "s/Z$//" >expected <<-\EOF &&
+       test_gitcomp "branch.me" "remote merge mergeoptions rebase" \
+               "branch.maint." "me" <<-\EOF
        branch.maint.merge Z
        branch.maint.mergeoptions Z
        EOF
-       (
-               local -a COMPREPLY &&
-               cur="branch.me" &&
-               __gitcomp "remote merge mergeoptions rebase
-                       " "branch.maint." "me" &&
-               IFS="$newline" &&
-               echo "${COMPREPLY[*]}" > out
-       ) &&
-       test_cmp expected out
 '
 
 test_expect_success '__gitcomp - suffix' '
-       sed -e "s/Z$//" >expected <<-\EOF &&
+       test_gitcomp "branch.me" "master maint next pu" "branch." \
+               "ma" "." <<-\EOF
        branch.master.Z
        branch.maint.Z
        EOF
-       (
-               local -a COMPREPLY &&
-               cur="branch.me" &&
-               __gitcomp "master maint next pu
-                       " "branch." "ma" "." &&
-               IFS="$newline" &&
-               echo "${COMPREPLY[*]}" > out
-       ) &&
-       test_cmp expected out
 '
 
 test_expect_success 'basic' '
@@ -169,7 +142,7 @@ test_expect_success 'basic' '
 '
 
 test_expect_success 'double dash "git" itself' '
-       sed -e "s/Z$//" >expected <<-\EOF &&
+       test_completion "git --" <<-\EOF
        --paginate Z
        --no-pager Z
        --git-dir=
@@ -184,11 +157,10 @@ test_expect_success 'double dash "git" itself' '
        --no-replace-objects Z
        --help Z
        EOF
-       test_completion "git --"
 '
 
 test_expect_success 'double dash "git checkout"' '
-       sed -e "s/Z$//" >expected <<-\EOF &&
+       test_completion "git checkout --" <<-\EOF
        --quiet Z
        --ours Z
        --theirs Z
@@ -199,17 +171,15 @@ test_expect_success 'double dash "git checkout"' '
        --orphan Z
        --patch Z
        EOF
-       test_completion "git checkout --"
 '
 
 test_expect_success 'general options' '
        test_completion "git --ver" "--version " &&
        test_completion "git --hel" "--help " &&
-       sed -e "s/Z$//" >expected <<-\EOF &&
+       test_completion "git --exe" <<-\EOF &&
        --exec-path Z
        --exec-path=
        EOF
-       test_completion "git --exe" &&
        test_completion "git --htm" "--html-path " &&
        test_completion "git --pag" "--paginate " &&
        test_completion "git --no-p" "--no-pager " &&
@@ -247,25 +217,25 @@ test_expect_success 'setup for ref completion' '
 '
 
 test_expect_success 'checkout completes ref names' '
-       test_completion_long "git checkout m" <<-\EOF
-       master_
-       mybranch_
-       mytag_
+       test_completion "git checkout m" <<-\EOF
+       master Z
+       mybranch Z
+       mytag Z
        EOF
 '
 
 test_expect_success 'show completes all refs' '
-       test_completion_long "git show m" <<-\EOF
-       master_
-       mybranch_
-       mytag_
+       test_completion "git show m" <<-\EOF
+       master Z
+       mybranch Z
+       mytag Z
        EOF
 '
 
 test_expect_success '<ref>: completes paths' '
-       test_completion_long "git show mytag:f" <<-\EOF
-       file1_
-       file2_
+       test_completion "git show mytag:f" <<-\EOF
+       file1 Z
+       file2 Z
        EOF
 '
 
@@ -273,8 +243,8 @@ test_expect_success 'complete tree filename with spaces' '
        echo content >"name with spaces" &&
        git add . &&
        git commit -m spaces &&
-       test_completion_long "git show HEAD:nam" <<-\EOF
-       name with spaces_
+       test_completion "git show HEAD:nam" <<-\EOF
+       name with spaces Z
        EOF
 '
 
@@ -282,9 +252,9 @@ test_expect_failure 'complete tree filename with metacharacters' '
        echo content >"name with \${meta}" &&
        git add . &&
        git commit -m meta &&
-       test_completion_long "git show HEAD:nam" <<-\EOF
-       name with ${meta}_
-       name with spaces_
+       test_completion "git show HEAD:nam" <<-\EOF
+       name with ${meta} Z
+       name with spaces Z
        EOF
 '
 
index 8889ba5104cd3f7c783a179d45816d3a82685ef0..22a4f8fb64a4e8084139fc148e8e7dd4aa73d684 100644 (file)
@@ -275,6 +275,15 @@ test_have_prereq () {
 
        for prerequisite
        do
+               case "$prerequisite" in
+               !*)
+                       negative_prereq=t
+                       prerequisite=${prerequisite#!}
+                       ;;
+               *)
+                       negative_prereq=
+               esac
+
                case " $lazily_tested_prereq " in
                *" $prerequisite "*)
                        ;;
@@ -294,10 +303,20 @@ test_have_prereq () {
                total_prereq=$(($total_prereq + 1))
                case "$satisfied_prereq" in
                *" $prerequisite "*)
+                       satisfied_this_prereq=t
+                       ;;
+               *)
+                       satisfied_this_prereq=
+               esac
+
+               case "$satisfied_this_prereq,$negative_prereq" in
+               t,|,t)
                        ok_prereq=$(($ok_prereq + 1))
                        ;;
                *)
-                       # Keep a list of missing prerequisites
+                       # Keep a list of missing prerequisites; restore
+                       # the negative marker if necessary.
+                       prerequisite=${negative_prereq:+!}$prerequisite
                        if test -z "$missing_prereq"
                        then
                                missing_prereq=$prerequisite
index 489bc80fc1b1ba4066a1fd5ad6d2024d67160ba7..0334a9e8fd761b8415f7beb5d70794bc5be33dfd 100644 (file)
@@ -738,6 +738,12 @@ test_lazy_prereq UTF8_NFD_TO_NFC '
        esac
 '
 
+test_lazy_prereq AUTOIDENT '
+       sane_unset GIT_AUTHOR_NAME &&
+       sane_unset GIT_AUTHOR_EMAIL &&
+       git var GIT_AUTHOR_IDENT
+'
+
 # When the tests are run as root, permission tests will report that
 # things are writable when they shouldn't be.
 test -w / || test_set_prereq SANITY