People sometimes find that "git add -u && git add ." are 13 keystrokes too many. The support of this has been very low priority for me personally, because I almost never do "git add ." in an already populated directory, and if a directory is not already populated, there is no point saying "git add -u" at the same time. However, for two types of people that are very different from me, this mode of operation may make sense and there is no reason to leave it unsupported. That is: (1) If you are extremely well disciplined and keep perfect .gitignore, it always is safe to say "git add ."; or (2) If you are extremely undisciplined and do not even know what files you created, and you do not very much care, it does not matter if "git add ." included everything. So here it is, although I suspect I will not use it myself, ever. Signed-off-by: Junio C Hamano <gitster@xxxxxxxxx> --- builtin-add.c | 13 +++++++++++-- 1 files changed, 11 insertions(+), 2 deletions(-) diff --git a/builtin-add.c b/builtin-add.c index 9b2ee8c..bc02fd7 100644 --- a/builtin-add.c +++ b/builtin-add.c @@ -190,7 +190,7 @@ static const char ignore_error[] = "The following paths are ignored by one of your .gitignore files:\n"; static int verbose = 0, show_only = 0, ignored_too = 0, refresh_only = 0; -static int ignore_add_errors; +static int ignore_add_errors, addremove; static struct option builtin_add_options[] = { OPT__DRY_RUN(&show_only), @@ -200,6 +200,7 @@ static struct option builtin_add_options[] = { OPT_BOOLEAN('p', "patch", &patch_interactive, "interactive patching"), OPT_BOOLEAN('f', "force", &ignored_too, "allow adding otherwise ignored files"), OPT_BOOLEAN('u', "update", &take_worktree_changes, "update tracked files"), + OPT_BOOLEAN('a', "all", &addremove, "add all, noticing removal of tracked files"), OPT_BOOLEAN( 0 , "refresh", &refresh_only, "don't add, only refresh the index"), OPT_BOOLEAN( 0 , "ignore-errors", &ignore_add_errors, "just skip files which cannot be added because of errors"), OPT_END(), @@ -254,6 +255,14 @@ int cmd_add(int argc, const char **argv, const char *prefix) git_config(add_config, NULL); + if (addremove && take_worktree_changes) + die("-a and -u are mutually incompatible"); + if (addremove && !argc) { + static const char *here[2] = { ".", NULL }; + argc = 1; + argv = here; + } + add_new_files = !take_worktree_changes && !refresh_only; require_pathspec = !take_worktree_changes; @@ -286,7 +295,7 @@ int cmd_add(int argc, const char **argv, const char *prefix) goto finish; } - if (take_worktree_changes) + if (take_worktree_changes || addremove) exit_status |= add_files_to_cache(prefix, pathspec, flags); if (add_new_files) -- 1.5.6.4.570.g052e6 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html