Контроль мерзавца <SHA> и Heroku

Я создал локального Мерзавца repo на моем ноутбуке и затем продвинул источник к Heroku, создающему удаленное ответвление. После нескольких дней фиксаций и нажатий, я должен откатывать к более ранней фиксации. Вот то, что я сделал.

cd <app root>
git checkout 35fbd894eef3e114c814cc3c7ac7bb50b28f6b73 

Кто-то сказал мне, что выполнение контроля создало новое рабочее дерево а не само ответвление, поэтому когда я продвинул изменения отката в Heroku, это сказало, что все актуально, и ничто не было продвинуто. Как я фиксирую эту ситуацию? Спасибо за Вашу справку заранее.

6
задан Bob 18 March 2010 в 04:31
поделиться

2 ответа

Когда вы проверяете прямое имя фиксации (используя SHA-1 хэш объекта фиксации) вместо проверки имени ветви, в итоге вы получаете "отделенный HEAD". HEAD - это "ссылка", которая отслеживает то, что в данный момент проверено. Он становится отсоединённым, когда вы напрямую проверяете коммит, а не ветку (он не привязан ни к какой ветке). При отсоединении HEAD хранилища никакие ветви не обновляются. Состояние отсоединённой головы можно представить так, как если бы у вас была проверена анонимная ветвь.


Чтобы снова присоединить HEAD вашего хранилища, вам нужно сохранить текущий HEAD как ветвь и проверить эту ветвь:

  1. Чтобы сохранить текущий HEAD в новой ветви, сделайте следующее:

    git branch .
    
  2. Чтобы перезаписать существующую ветку, нужно использовать --force:

    git branch --force 
    
  3. Затем повторно подключите HEAD вашего репозитория, проверив новую/обновленную ветку:

    git checkout 
    

    (где - то же самое, что или , в зависимости от того, какую из двух вышеприведенных команд вы использовали)

Эта последовательность (git branch, чтобы сделать ссылку на текущий HEAD-коммит, затем git checkout эта обновлённая ветвь) перенесёт любое незафиксированное содержимое, которое может быть у вас в рабочем индексе и/или дереве.


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

git reset --hard <commit>

Это сбросит текущую ветвь (или ваш отсоединённый HEAD, если он уже отсоединён) на указанный коммит, и заставит индекс и рабочее дерево отразить этот коммит (т.е. отбросит все коммиты после указанного коммита вместе с любым незафиксированным содержимым).

Отсоединённое состояние HEAD полезно для пересмотра старых состояний, а иногда и для краткосрочной работы, в сохранности которой вы не уверены. В остальных случаях вы, вероятно, захотите его избежать.

8
ответ дан 10 December 2019 в 00:36
поделиться

Вы хотите сбросить:

git reset --hard 35fbd894eef3e114c814cc3c7ac7bb50b28f6b73
2
ответ дан 10 December 2019 в 00:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: