Есть несколько способов решить эту проблему.Во-первых, я продемонстрирую создание примера репозитория, чтобы вы могли воспроизвести это точно:
library(git2r)
path <- "SOanswer"
dir.create(path)
repo <- init(path)
writeLines("Commit1", con = file.path(path, "commit1.txt"))
add(repo, "commit1.txt")
commit(repo, "First commit message")
repository_head(repo)
commits(repo)
writeLines("Commit2", con = file.path(path, "commit2.txt"))
add(repo, "commit2.txt")
commit(repo, "Second commit message")
Теперь ваша проблема в том, что если вы запустите checkout(commits(repo)[[2]])
, вы потеряете коммит 2, и он больше не будетпоказать в commits()
.Однако вы можете просто сделать эквивалент git checkout master
(обсуждение аналогичных проблем в простом контексте git см., Например, this question ):
list.files(path)
# [1] "commit1.txt" "commit2.txt"
checkout(commits(repo)[[2]])
list.files(path)
# [1] "commit1.txt"
checkout(repo, branch = "master")
list.files(path)
# [1] "commit1.txt" "commit2.txt"
Thisприведет вас к руководителю мастер-ветви.Однако предположим, что вы хотите перейти к конкретному коммиту.Вы можете сделать это с коммитом SHA.Вот пример:
writeLines("Commit3", con = file.path(path, "commit3.txt"))
add(repo, "commit3.txt")
commit(repo, "Third commit message")
completed_commits <- commits(repo) # Store the commits so we know the SHAs
list.files(path)
# [1] "commit1.txt" "commit2.txt" "commit3.txt"
checkout(completed_commits[[3]])
list.files(path)
# [1] "commit1.txt"
checkout(completed_commits[[2]])
list.files(path)
# [1] "commit1.txt" "commit2.txt"
checkout(completed_commits[[1]])
list.files(path)
# [1] "commit1.txt" "commit2.txt" "commit3.txt"