我正在尝试在两个分支之间实现简单的结账操作。代码执行没有错误。
git_libgit2_init();
git_object *treeish = NULL;
git_checkout_options opts;
opts.checkout_strategy = GIT_CHECKOUT_SAFE;
/* branchName in this case is "master" */
handleError(git_revparse_single(&treeish, repo, branchName));
handleError(git_checkout_tree(repo, treeish, &opts));
git_object_free(treeish);
git_libgit2_shutdown();
然而,使用
git status
检查时,该分支并未更改。
我已查看了libgit2的101示例,它说:
在我的情况下,我正在使用非常小的 repo 进行测试,其中没有未提交的更改,并且这两个分支之间也没有任何冲突。 我做错了什么?我期望这段代码能像
git_checkout_options
实际上并不是可选的。默认设置在大多数情况下都没用。最好的例子就是 checkout_strategy; 默认值对工作目录没有任何影响。因此,如果您想要将文件检出,请选择适当的策略。
NONE
相当于干运行;不会检出任何文件。
SAFE
类似于git checkout
;未修改的文件会被更新,已修改的文件则保持不变。如果某个文件在旧 HEAD 中存在但不存在,则视为删除,并且不会创建该文件。
RECREATE_MISSING
类似于git checkout-index
,或者在克隆之后发生的情况。未修改的文件会被更新,并会创建缺失的文件,但具有修改的文件则保持不变。
FORCE
类似于git checkout --force
;所有修改都将被覆盖,所有缺失的文件都将被创建。
git checkout master
一样有所作为。