Git Checkout <SHA>и Heroku - PullRequest
       16

Git Checkout <SHA>и Heroku

6 голосов
/ 18 марта 2010

Я создал локальное Git-репо на своем ноутбуке, а затем перенес источник в Heroku, создав удаленную ветку.После нескольких дней коммитов и толчков мне нужно откатиться до более раннего коммита.Вот что я сделал.

cd <app root>
git checkout 35fbd894eef3e114c814cc3c7ac7bb50b28f6b73 

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

Ответы [ 2 ]

8 голосов
/ 18 марта 2010

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


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

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

    git branch <new-branch-name>
    
  2. Чтобы перезаписать существующую ветку , необходимо использовать --force:

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

    git checkout <branch-name>
    

    (где <branch-name> совпадает с <new-branch-name> или <existing-branch-name>, в зависимости от того, какую из двух вышеуказанных команд вы использовали)

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


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

git reset --hard <commit>

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

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

2 голосов
/ 18 марта 2010

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

git reset --hard 35fbd894eef3e114c814cc3c7ac7bb50b28f6b73
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...