"Johannes Schindelin via GitGitGadget" <gitgitgadget@xxxxxxxxx> writes: > From: Johannes Schindelin <johannes.schindelin@xxxxxx> > > The `git stash` and `git reset` commands support a `--patch` option, and > both simply hand off to `git add -p` to perform that work. Let's teach > the built-in version of that command to be able to perform that work, too. > > Signed-off-by: Johannes Schindelin <johannes.schindelin@xxxxxx> > --- > add-interactive.h | 2 ++ > add-patch.c | 85 ++++++++++++++++++++++++++++++++++++++++++++--- > builtin/add.c | 4 +++ > 3 files changed, 87 insertions(+), 4 deletions(-) > > diff --git a/add-interactive.h b/add-interactive.h > index 3defa2ff3d..c278f3e26f 100644 > --- a/add-interactive.h > +++ b/add-interactive.h > @@ -25,6 +25,8 @@ int run_add_i(struct repository *r, const struct pathspec *ps); > > enum add_p_mode { > ADD_P_STAGE, > + ADD_P_STASH, > + ADD_P_RESET, As I mentioned in my review on the previous step, ADD_P_ADD would be more descriptive of what is going on when listed together with STASH and RESET here. > +static struct patch_mode patch_mode_reset_head = { > + .diff = { "diff-index", "--cached", NULL }, > + .apply = { "-R", "--cached", NULL }, > + .apply_check = { "-R", "--cached", NULL }, > + .is_reverse = 1, > + .index_only = 1, > + .prompt_mode = { > + N_("Unstage mode change [y,n,q,a,d%s,?]? "), > + N_("Unstage deletion [y,n,q,a,d%s,?]? "), > + N_("Unstage this hunk [y,n,q,a,d%s,?]? "), > + }, > + .edit_hunk_hint = N_("If the patch applies cleanly, the edited hunk " > + "will immediately be marked for unstaging."), > + .help_patch_text = > + N_("y - unstage this hunk\n" > + "n - do not unstage this hunk\n" > + "q - quit; do not unstage this hunk or any of the remaining " > + "ones\n" > + "a - unstage this hunk and all later hunks in the file\n" > + "d - do not unstage this hunk or any of the later hunks in " > + "the file\n"), > +}; > + > +static struct patch_mode patch_mode_reset_nothead = { > + .diff = { "diff-index", "-R", "--cached", NULL }, > + .apply = { "--cached", NULL }, > + .apply_check = { "--cached", NULL }, > + .is_reverse = 0, > + .index_only = 1, > + .prompt_mode = { > + N_("Apply mode change to index [y,n,q,a,d%s,?]? "), > + N_("Apply deletion to index [y,n,q,a,d%s,?]? "), > + N_("Apply this hunk to index [y,n,q,a,d%s,?]? "), > + }, > + .edit_hunk_hint = N_("If the patch applies cleanly, the edited hunk " > + "will immediately be marked for applying."), > + .help_patch_text = > + N_("y - apply this hunk to index\n" > + "n - do not apply this hunk to index\n" > + "q - quit; do not apply this hunk or any of the remaining " > + "ones\n" > + "a - apply this hunk and all later hunks in the file\n" > + "d - do not apply this hunk or any of the later hunks in " > + "the file\n"), > +}; Interesting that "reset to HEAD" and "reset to non-HEAD" would have to swap the direction to make it feel more natural to the users. This is nothing new---just re-discovering that it is/was interesting.