Sometimes "git add -p" with "e" to edit the patch does not satisfy me. What I want is a quick way to modify index content without changing worktree, then I can continue adding more hunks to the index. With this option, I can swap index out for a quick edit, then swap it in again. Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx> --- Not sure if anybody has the same needs, enough to polish it and make it to master. builtin/update-index.c | 16 ++++++++++++++++ 1 files changed, 16 insertions(+), 0 deletions(-) diff --git a/builtin/update-index.c b/builtin/update-index.c index a6a23fa..b96065a 100644 --- a/builtin/update-index.c +++ b/builtin/update-index.c @@ -22,6 +22,7 @@ static int allow_add; static int allow_remove; static int allow_replace; +static int swap_entry; static int info_only; static int force_remove; static int verbose; @@ -104,6 +105,19 @@ static int add_one_path(struct cache_entry *old, const char *path, int len, stru free(ce); return -1; } + if (swap_entry) { + struct checkout state; + if (allow_add || allow_remove) + die("--add, --replace and --swap do not play together"); + memset(&state, 0, sizeof(state)); + state.force = 1; + state.not_new = 1; + if (add_cache_entry(ce, 0)) + return error("%s: cannot add to the index", path); + if (checkout_entry(old, &state, NULL)) + return error("%s: cannot swap", path); + return 0; + } option = allow_add ? ADD_CACHE_OK_TO_ADD : 0; option |= allow_replace ? ADD_CACHE_OK_TO_REPLACE : 0; if (add_cache_entry(ce, option)) @@ -727,6 +741,8 @@ int cmd_update_index(int argc, const char **argv, const char *prefix) "let files replace directories and vice-versa", 1), OPT_SET_INT(0, "remove", &allow_remove, "notice files missing from worktree", 1), + OPT_SET_INT(0, "swap", &swap_entry, + "swap the content of index and worktree", 1), OPT_BIT(0, "unmerged", &refresh_args.flags, "refresh even if index contains unmerged entries", REFRESH_UNMERGED), -- 1.7.4.74.g639db -- 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