Я создал локального Мерзавца repo на моем ноутбуке и затем продвинул источник к Heroku, создающему удаленное ответвление. После нескольких дней фиксаций и нажатий, я должен откатывать к более ранней фиксации. Вот то, что я сделал.
cd <app root>
git checkout 35fbd894eef3e114c814cc3c7ac7bb50b28f6b73
Кто-то сказал мне, что выполнение контроля создало новое рабочее дерево а не само ответвление, поэтому когда я продвинул изменения отката в Heroku, это сказало, что все актуально, и ничто не было продвинуто. Как я фиксирую эту ситуацию? Спасибо за Вашу справку заранее.
Когда вы проверяете прямое имя фиксации (используя SHA-1 хэш объекта фиксации) вместо проверки имени ветви, в итоге вы получаете "отделенный HEAD". HEAD - это "ссылка", которая отслеживает то, что в данный момент проверено. Он становится отсоединённым, когда вы напрямую проверяете коммит, а не ветку (он не привязан ни к какой ветке). При отсоединении HEAD хранилища никакие ветви не обновляются. Состояние отсоединённой головы можно представить так, как если бы у вас была проверена анонимная ветвь.
Чтобы снова присоединить HEAD вашего хранилища, вам нужно сохранить текущий HEAD как ветвь и проверить эту ветвь:
Чтобы сохранить текущий HEAD в новой ветви, сделайте следующее:
git branch .
Чтобы перезаписать существующую ветку, нужно использовать --force
:
git branch --force
Затем повторно подключите HEAD вашего репозитория, проверив новую/обновленную ветку:
git checkout
(где
- то же самое, что
или
, в зависимости от того, какую из двух вышеприведенных команд вы использовали)
Эта последовательность (git branch
, чтобы сделать ссылку на текущий HEAD-коммит, затем git checkout
эта обновлённая ветвь) перенесёт любое незафиксированное содержимое, которое может быть у вас в рабочем индексе и/или дереве.
В будущем, если вы захотите "откатить" текущую ветвь к некоторому предыдущему коммиту, вам следует использовать это вместо отсоединения HEAD вашего хранилища:
git reset --hard <commit>
Это сбросит текущую ветвь (или ваш отсоединённый HEAD, если он уже отсоединён) на указанный коммит, и заставит индекс и рабочее дерево отразить этот коммит (т.е. отбросит все коммиты после указанного коммита вместе с любым незафиксированным содержимым).
Отсоединённое состояние HEAD полезно для пересмотра старых состояний, а иногда и для краткосрочной работы, в сохранности которой вы не уверены. В остальных случаях вы, вероятно, захотите его избежать.
Вы хотите сбросить:
git reset --hard 35fbd894eef3e114c814cc3c7ac7bb50b28f6b73