Я хочу вернуться к предыдущей фиксации, а затем опубликовать этот код, а затем вернуться к последней фиксации.
т.е. мой мастер указывает на более старую версию фиксации, чтобы я мог удалить эту версию, а затем я хочу вернуться к последней фиксации, которой я был изначально.
Как я могу это сделать?
Ваш вопрос непонятен. Я думаю, что вы просите вот что:
Что это будет делать? Она будет толкать себя
$old_commit_id
обязательство вorigin
качестве нового главыorigin
«Smaster
отрасли.Если это то, что вы хотели, вам вообще не нужно трогать местный
master
филиал.источник
master (non-fast-forward)
для меня неудачей. Решение @jtdubs сработало.-f
его принудительно - хотя удаленное репо может быть настроено так, чтобы это запретить. Я обновил ответ.использовать
git reset --hard <old commit number>
он сбросит HEAD на этот старый коммит.
Кроме того, вам нужно использовать
git push -f origin
для изменения удаленного репо.источник
Если вы хотите избежать принудительного нажатия, вот как вернуть ваше репо к более старому фиксации и сохранить всю промежуточную работу:
git checkout 307a5cd # check out the commit that you want to reset to git checkout -b fixy # create a branch named fixy to do the work git merge -s ours master # merge master's history without changing any files git checkout master # switch back to master git merge fixy # and merge in the fixed branch git push # done, no need to force push!
Выполнено! Замените 307a5cd любым коммитом, который вы хотите в своем репо.
(Я знаю, что первые две строки можно объединить, но я думаю, что это делает менее понятным, что происходит)
Вот это графически:
Вы эффективно удаляете c3 и c4 и снова устанавливаете свой проект на c2. Однако c3 и c4 все еще доступны в истории вашего проекта, если вы когда-нибудь захотите увидеть их снова.
источник
Предполагая такой график фиксации:
Вы хотите сначала оформить заказ
master
и создать ветку, указывающую наmaster
текущее местоположение:Теперь должно выглядеть так:
Теперь, когда вы уже в процессе
master
, мы прикажемmaster
ветке переместиться на одну фиксацию назад:Теперь
master
нужно переместиться на один пробел назад, ноpointer
ветка все еще находится на последней фиксации:На этом этапе вы можете нажать
master
на удаленный компьютер или где-либо еще, а затем быстро слить его обратно вpointer
ветку. Вы можете убитьpointer
ветку в этот момент:Финал:
источник
git push origin master
произойдет сбой, так как кончик вашей текущей ветки находится за своим удаленным аналогом . Вы также должны передать флаг -f.Вы можете просто
git checkout <commit-id>
сделать все, что вам нужно, а затемgit checkout master
вернуться к новому коду.Если вам действительно нужно изменить старый код, чтобы выпустить его, вам, вероятно, следует:
Кроме того, я не могу рекомендовать git flow достаточно. Все это довольно просто.
источник
Чтобы перейти к предыдущей версии:
git checkout <version hash>
делай свою работу здесь и совершай ее с
git commit --amend
Чтобы вернуться к мастеру :
git checkout master
источник
git reset --hard
указал своей главной веткой обратно на старую фиксацию, поэтомуgit checkout master
ничего не будет делать.commit --amend
шаг достаточно полезен--amend
?