git_stash_save()
позволяет сохранять изменения, аналогично git stash
. Есть ли функция для git stash pop
возврата изменений?
Я вижу git_stash_foreach()
и git_stash_drop()
. Есть ли способ использовать их для достижения этой функциональности?
Изменить: основываясь на ответе nulltoken, я ожидал, что следующий код будет работать:
void tstStashPop ( const char * repo_path )
{
git_repository *repo;
git_commit * top_cmt;
git_oid saved_stash;
git_tree * top_tree;
git_signature *signature;
// open a repository
if ( git_repository_open(&repo, repo_path) != 0 )
{
assert(false);
}
else
{
// create a signature
git_signature_new(&signature, "no name", "[email protected]", 1323847743, 60);
if ( git_stash_save( &saved_stash, repo, signature,
"message for this stash", /*GIT_STASH_INCLUDE_UNTRACKED*/0)
!= GIT_ENOTFOUND )
{
// get the commit that was saved by git stash save
if ( git_commit_lookup( &top_cmt, repo, &saved_stash ) != 0 )
{
assert(false);
}
else
{
// get the tree for this commit
if ( git_commit_tree( &top_tree, top_cmt ) != 0 )
{
assert(false);
}
else
{
// checkout the tree
git_checkout_opts opts;
opts = GIT_CHECKOUT_OPTS_INIT;
opts.checkout_strategy = GIT_CHECKOUT_SAFE_CREATE;
if ( git_checkout_tree( repo, (git_object*)top_tree, &opts ) != 0 )
{
assert(false);
}
}
}
// remove the stashed commit
git_stash_drop( repo, 0 );
}
// free signature
git_signature_free(signature);
// free repo
git_repository_free(repo);
}
}
Об ошибке не сообщается, но изменения не восстанавливаются. git_stash_save()
работает (я вижу сообщение с git stash list
) и git_stash_drop()
тоже работает. Однако git_checkout_tree()
не производит никакого эффекта.
Кроме того, должен ли я освободить top_tree
и top_cmt
?