Моя программа (которая использует libgit2) делает коммит в локальное репо (без pu sh, только коммит), затем делает что-то и затем, в соответствии с результатом, пытается отменить последний коммит сбросив репо в HEAD ~ 1 (один коммит до HEAD). Просто hard reset.
Проблема : приведенный ниже код сбрасывает HEAD в HEAD ~ 1, но оставляет все изменения между этими 2 коммитами как «поэтапные», а мне нужно просто стереть их меняется. Что я делаю не так?
bool RevertLastCommit(std::string &errorMessage) {
int error;
git_object *head_commit_obj = nullptr;
error = git_revparse_single(&head_commit_obj, repo, "HEAD~1");
if (error < 0)
{
return false;
}
git_commit *head_commit = (git_commit *)head_commit_obj;
git_checkout_options opts = GIT_CHECKOUT_OPTIONS_INIT;
opts.checkout_strategy = GIT_CHECKOUT_FORCE;
int reset_result = git_reset(repo, const_cast<git_object *>(head_commit_obj), GIT_RESET_HARD, &opts);
if (reset_result < 0) {
printf("Reset failed!\n");
return false;
}
printf("Done reverting\n");
error = git_checkout_head(repo, &opts);
if (error < 0)
{
return false;
}
printf("Hard checkout\n");
return true;