Правильный способ обновления ссылки в Rugged

В ответ на более ранний вопрос я пытаюсь обновить одну ссылку (например, release), чтобы указать на другую ссылку (например, master).


Если у меня есть ветки master и release, а master — это одиночная фиксация перед release, я бы хотел «перемотать вперед» release до master. Я пробую это:

r = Rugged::Repository.new(".") # assume we're on the `release` branch
r.references.update(r.head.resolve, r.branches['master'].target_id)

Это почти работает, но оставляет мое репо в таком состоянии:

On branch release
Your branch is ahead of 'origin/release' by 1 commit.
  (use "git push" to publish your local commits)
 Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    modified:   file

Я пропустил шаг? Я ожидаю, что моя промежуточная площадка будет «чистой».

Я пробовал r.index.write_tree(r) и r.index.write, но без костей.


person Max    schedule 22.01.2015    source источник
comment
Это весь ваш код? Похоже, вы не проверяете цель, поэтому индекс содержит предыдущие данные. Я не понимаю, почему, поскольку вы, кажется, делаете шаг проверки в вопросе, на который вы ссылаетесь.   -  person Edward Thomson    schedule 23.01.2015
comment
возможный дубликат Выполнение быстрого слияния с Rugged   -  person Edward Thomson    schedule 23.01.2015
comment
Я не понимаю - я уже заявил, что предполагаю, что ветвь выпуска уже проверена, когда создается экземпляр репозитория.   -  person Max    schedule 23.01.2015
comment
Это сложная терминология. Это не проверено, вы находитесь на ветке выпуска, но содержимого из мастера еще нет. Функция проверки libgit2 обновит рабочий каталог и индекс новым содержимым. Если вы этого не сделаете, статус покажет, что у вас есть изменения.   -  person Edward Thomson    schedule 23.01.2015
comment
Итак... что мне нужно сделать? Я попробовал r.head = 'refs/heads/release', но это ничего не изменило.   -  person Max    schedule 23.01.2015
comment
Хм... вызов r.reset(r.head.target, :hard), как указано в комментарии здесь кажется, я делаю то, что хочу. Это неправильный подход?   -  person Max    schedule 23.01.2015
comment
Что не так с ответом на другой ваш вопрос?   -  person Edward Thomson    schedule 23.01.2015
comment
Он оставляет грязный индекс, как я указал в этом вопросе.   -  person Max    schedule 23.01.2015
comment
Ваш код - в этом вопросе - не показывает, что вы делаете заказ. Можете ли вы опубликовать фактический код, который вы используете?   -  person Edward Thomson    schedule 23.01.2015
comment
Просто добавьте к первой строке префикс git checkout release в командной строке.   -  person Max    schedule 23.01.2015
comment
Хорошо. Поэтому используйте код в ответе на ваш другой вопрос, который вызывает Rugged checkout, который обновит индекс и рабочий каталог.   -  person Edward Thomson    schedule 23.01.2015
comment
Без изменений; r.checkout_tree(r.branches["release"].target) ничего не делает.   -  person Max    schedule 23.01.2015