* [PATCH v2 0/1] enhance "git restore --worktree --staged" behavior @ 2020-05-05 7:17 Eric Sunshine 2020-05-05 7:17 ` [PATCH v2 1/1] restore: default to HEAD when combining --staged and --worktree Eric Sunshine 0 siblings, 1 reply; 3+ messages in thread From: Eric Sunshine @ 2020-05-05 7:17 UTC (permalink / raw) To: git Cc: Harri Mehtälä, Duy Nguyen, Junio C Hamano, Taylor Blau, Eric Sunshine This is a re-roll of [1] which enhances git-restore to default --source to HEAD when --worktree and --staged are combined. Changes since v1: * tighten the commit message and documentation changes as requested by Junio[2] * drop patch 1/2 since 2/2 threw away all the changes from 1/2, and the end result is the same with or without 1/2 Although the code is identical between v1 and v2, I didn't include Taylor's "Reviewed-by:"[3,4] since the documentation changes have been refined a bit. [1]: https://lore.kernel.org/git/20200501082746.23943-1-sunshine@sunshineco.com/ [2]: https://lore.kernel.org/git/xmqqimhfoelf.fsf@gitster.c.googlers.com/ [3]: https://lore.kernel.org/git/20200501221613.GC41612@syl.local/ [4]: https://lore.kernel.org/git/20200501221951.GD41612@syl.local/ Eric Sunshine (1): restore: default to HEAD when combining --staged and --worktree Documentation/git-restore.txt | 11 ++++------- builtin/checkout.c | 6 +++--- t/t2070-restore.sh | 11 +++++++++++ 3 files changed, 18 insertions(+), 10 deletions(-) Interdiff against v1: diff --git a/Documentation/git-restore.txt b/Documentation/git-restore.txt index 5b61812e17..84c6c40010 100644 --- a/Documentation/git-restore.txt +++ b/Documentation/git-restore.txt @@ -22,10 +22,8 @@ The command can also be used to restore the content in the index with `--staged`, or restore both the working tree and the index with `--staged --worktree`. -By default, the restore source for `--worktree` is the index, and the -restore source for `--staged` is `HEAD`. When combining `--worktree` and -`--staged`, the restore source is `HEAD`. `--source` can be used to specify -a different commit as the restore source. +By default, if `--staged` is given, the contents are restored from `HEAD`, +otherwise from the index. Use `--source` to restore from a different commit. See "Reset, restore and revert" in linkgit:git[1] for the differences between the three commands. @@ -40,10 +38,8 @@ OPTIONS tree. It is common to specify the source tree by naming a commit, branch or tag associated with it. + -If not specified, the default restore source for `--worktree` is -the index, and the default restore source for `--staged` is -`HEAD`. When both `--staged` and `--worktree` are specified, -the default restore source is `HEAD`. +If not specified, the contents are restored from `HEAD` if `--staged` is +given, otherwise from the index. -p:: --patch:: -- 2.26.2.672.g232c24e857 ^ permalink raw reply related [flat|nested] 3+ messages in thread
* [PATCH v2 1/1] restore: default to HEAD when combining --staged and --worktree 2020-05-05 7:17 [PATCH v2 0/1] enhance "git restore --worktree --staged" behavior Eric Sunshine @ 2020-05-05 7:17 ` Eric Sunshine 2020-05-05 16:04 ` Taylor Blau 0 siblings, 1 reply; 3+ messages in thread From: Eric Sunshine @ 2020-05-05 7:17 UTC (permalink / raw) To: git Cc: Harri Mehtälä, Duy Nguyen, Junio C Hamano, Taylor Blau, Eric Sunshine By default, files are restored from the index for --worktree, and from HEAD for --staged. When --worktree and --staged are combined, --source must be specified to disambiguate the restore source[1], thus making it cumbersome to restore a file in both the worktree and the index. However, HEAD is also a reasonable default for --worktree when combined with --staged, so make it the default anytime --staged is used (whether combined with --worktree or not). [1]: Due to an oversight, the --source requirement, though documented, is not actually enforced. Signed-off-by: Eric Sunshine <sunshine@sunshineco.com> --- Documentation/git-restore.txt | 11 ++++------- builtin/checkout.c | 6 +++--- t/t2070-restore.sh | 11 +++++++++++ 3 files changed, 18 insertions(+), 10 deletions(-) diff --git a/Documentation/git-restore.txt b/Documentation/git-restore.txt index 8e3b339802..84c6c40010 100644 --- a/Documentation/git-restore.txt +++ b/Documentation/git-restore.txt @@ -22,9 +22,8 @@ The command can also be used to restore the content in the index with `--staged`, or restore both the working tree and the index with `--staged --worktree`. -By default, the restore sources for working tree and the index are the -index and `HEAD` respectively. `--source` could be used to specify a -commit as the restore source. +By default, if `--staged` is given, the contents are restored from `HEAD`, +otherwise from the index. Use `--source` to restore from a different commit. See "Reset, restore and revert" in linkgit:git[1] for the differences between the three commands. @@ -39,10 +38,8 @@ OPTIONS tree. It is common to specify the source tree by naming a commit, branch or tag associated with it. + -If not specified, the default restore source for the working tree is -the index, and the default restore source for the index is -`HEAD`. When both `--staged` and `--worktree` are specified, -`--source` must also be specified. +If not specified, the contents are restored from `HEAD` if `--staged` is +given, otherwise from the index. -p:: --patch:: diff --git a/builtin/checkout.c b/builtin/checkout.c index 8bc94d392b..500c3e23ff 100644 --- a/builtin/checkout.c +++ b/builtin/checkout.c @@ -1605,10 +1605,10 @@ static int checkout_main(int argc, const char **argv, const char *prefix, if (opts->checkout_index < 0 || opts->checkout_worktree < 0) BUG("these flags should be non-negative by now"); /* - * convenient shortcut: "git restore --staged" equals - * "git restore --staged --source HEAD" + * convenient shortcut: "git restore --staged [--worktree]" equals + * "git restore --staged [--worktree] --source HEAD" */ - if (!opts->from_treeish && opts->checkout_index && !opts->checkout_worktree) + if (!opts->from_treeish && opts->checkout_index) opts->from_treeish = "HEAD"; /* diff --git a/t/t2070-restore.sh b/t/t2070-restore.sh index 076d0df7fc..89e5a142c9 100755 --- a/t/t2070-restore.sh +++ b/t/t2070-restore.sh @@ -69,6 +69,17 @@ test_expect_success 'restore --staged uses HEAD as source' ' test_cmp expected actual ' +test_expect_success 'restore --worktree --staged uses HEAD as source' ' + test_when_finished git reset --hard && + git show HEAD:./first.t >expected && + echo dirty >>first.t && + git add first.t && + git restore --worktree --staged first.t && + git show :./first.t >actual && + test_cmp expected actual && + test_cmp expected first.t +' + test_expect_success 'restore --ignore-unmerged ignores unmerged entries' ' git init unmerged && ( -- 2.26.2.672.g232c24e857 ^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH v2 1/1] restore: default to HEAD when combining --staged and --worktree 2020-05-05 7:17 ` [PATCH v2 1/1] restore: default to HEAD when combining --staged and --worktree Eric Sunshine @ 2020-05-05 16:04 ` Taylor Blau 0 siblings, 0 replies; 3+ messages in thread From: Taylor Blau @ 2020-05-05 16:04 UTC (permalink / raw) To: Eric Sunshine Cc: git, Harri Mehtälä, Duy Nguyen, Junio C Hamano, Taylor Blau On Tue, May 05, 2020 at 03:17:16AM -0400, Eric Sunshine wrote: > By default, files are restored from the index for --worktree, and from > HEAD for --staged. When --worktree and --staged are combined, --source > must be specified to disambiguate the restore source[1], thus making it > cumbersome to restore a file in both the worktree and the index. > > However, HEAD is also a reasonable default for --worktree when combined > with --staged, so make it the default anytime --staged is used (whether > combined with --worktree or not). > > [1]: Due to an oversight, the --source requirement, though documented, > is not actually enforced. > > Signed-off-by: Eric Sunshine <sunshine@sunshineco.com> > --- > Documentation/git-restore.txt | 11 ++++------- > builtin/checkout.c | 6 +++--- > t/t2070-restore.sh | 11 +++++++++++ > 3 files changed, 18 insertions(+), 10 deletions(-) Thanks, the new version looks good to me, too. Reviewed-by: Taylor Blau <me@ttaylorr.com> Thanks, Taylor ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2020-05-05 16:04 UTC | newest] Thread overview: 3+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2020-05-05 7:17 [PATCH v2 0/1] enhance "git restore --worktree --staged" behavior Eric Sunshine 2020-05-05 7:17 ` [PATCH v2 1/1] restore: default to HEAD when combining --staged and --worktree Eric Sunshine 2020-05-05 16:04 ` Taylor Blau
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox