reset: allow the caller to specify the current HEAD object

When calling `reset_working_tree()` we automatically derive the commit
that the callers wants to move from by reading the HEAD commit. Some
callers may already have resolved it, or they may want to move from a
different commit that doesn't match HEAD.

Introduce a new `oid_from` option that lets the caller specify the
commit.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
seen
Patrick Steinhardt 2026-07-01 13:35:34 +02:00 committed by Junio C Hamano
parent 100d15a980
commit c2b486d7f3
2 changed files with 9 additions and 1 deletions

View File

@ -122,7 +122,10 @@ int reset_working_tree(struct repository *r,
goto leave_reset_head;
}

if (!repo_get_oid(r, "HEAD", &head_oid)) {
if (opts->oid_from) {
oidcpy(&head_oid, opts->oid_from);
head = &head_oid;
} else if (!repo_get_oid(r, "HEAD", &head_oid)) {
head = &head_oid;
} else if (!oid || !reset_hard) {
ret = error(_("could not determine HEAD revision"));

View File

@ -37,6 +37,11 @@ struct reset_working_tree_options {
* The commit to checkout/reset to. Defaults to HEAD.
*/
const struct object_id *oid;
/*
* The commit to checkout/reset from when doing a two-way merge. This
* is used as one of the sides to merge.
*/
const struct object_id *oid_from;
/*
* Optional value to set ORIG_HEAD. Defaults to HEAD.
*/