This question касается того, как выполнить слияние с pygit2
, но, насколько мне известно, это приведет к новой фиксации. Есть ли способ выполнить rebase, который не приведет к новой фиксации и просто ускорит перемотку ссылки на ветку, чтобы соответствовать последнему с данного пульта?Как я могу выполнить rebase с pygit2?
ответ
Вы можете перемотки вперед с Reference.set_target().
Примера (быстрая пересылка master
в origin/master
, при условии, что сценарий начинается с извлеченного master
ветви в чистом состоянии):
repo.remotes['origin'].fetch()
origin_master = repo.lookup_branch('origin/master', pygit2.GIT_BRANCH_REMOTE)
master = repo.lookup_branch('master')
master.set_target(origin_master.target)
# Fast-forwarding with set_target() leaves the index and the working tree
# in their old state. That's why we need to checkout() and reset()
repo.checkout('refs/heads/master')
repo.reset(master.target, pygit2.GIT_RESET_HARD)
будет [repo.lookup_branch ('origin/branch1', GIT_BRANCH_REMOTE)] (http://www.pygit2.org/references.html#pygit2.Repository.lookup_branch) на самом деле извлекает последнее состояние из удаленного («origin» в этом дело)? * edit *: markdown – Piotrek
@Piotrek Нет, 'lookup_branch()' не извлекает. Вы должны 'fetch()' явно. См. Обновленный ответ. – Leon
, который, строго говоря, перебазироваться. Это ускоренное слияние. –
@WayneWerner да, вы правы. Мне нужно будет поиграть с pygit2, чтобы применить изменения в текущей ветке * поверх * последнего состояния из той же ветви на удаленном компьютере. – Piotrek