restore: default to --source=HEAD when only --staged is specified
"git restore --staged" without --source does not make much sense since by default we restore from the index. Instead of copying the index to itself, set the default source to HEAD in this case, yielding behavior that matches "git reset -- <paths>". Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Nguyễn Thái Ngọc Duy committed
Apr 25, 2019 at 16:45 UTC
3a733ce5237570460bbb63e20002b92e903ad65f
1 file changed
+6
builtin/checkout.c
+6
@@ -1524,6 +1524,12 @@ static int checkout_main(int argc, const char **argv, const char *prefix,
1524
}
1525
if (opts->checkout_index < 0 || opts->checkout_worktree < 0)
1526
BUG("these flags should be non-negative by now");
1527
+ /*
1528
+ * convenient shortcut: "git restore --staged" equals
1529
+ * "git restore --staged --source HEAD"
1530
+ */
1531
+ if (!opts->from_treeish && opts->checkout_index && !opts->checkout_worktree)
1532
+ opts->from_treeish = "HEAD";
1533
1534
/*
1535
* From here on, new_branch will contain the branch to be checked out,