Проблемы с проверкой коммита с использованием GIT2r - PullRequest
0 голосов
/ 02 октября 2018

Насколько я могу судить из документации git2r, есть только два способа получить предыдущий коммит: извлечение и сброс.

Проблема, с которой я столкнулся, заключается в том, что в обоих случаях я, похоже, теряю все новые коммиты.Может я не понимаю, что здесь происходит?Он предназначен для такой работы?

Я использую его только локально, поэтому не нужно ни толкать, ни тянуть откуда-либо, только локальные коммиты.

Вот команды, которые я использую:

# to create a new commit
repo <- repository(path = "/blah/blah/blah")
add(repo,"*")
commit(repo,"my new nice commit")

# to retrieve a previous commit:
checkout(commits(repo)[[2]]) # if only a single previous commit exists it will be number 2
OR
reset(commits(repo)[[2]])

снова оба приводят к потере новых коммитов.Кто-нибудь знает, что происходит?

Заранее большое спасибо!

1 Ответ

0 голосов
/ 02 октября 2018

Есть несколько способов решить эту проблему.Во-первых, я продемонстрирую создание примера репозитория, чтобы вы могли воспроизвести это точно:

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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...