Как я могу переключить мой репозиторий git на конкретный коммит

В моем репозитории git я сделал 5 коммитов, как показано ниже в моем git журнале:

commit 4f8b120cdafecc5144d7cdae472c36ec80315fdc
Author: Michael 
Date:   Fri Feb 4 15:26:38 2011 -0800

commit b688d46f55db1bc304f7f689a065331fc1715079
Author: Michael
Date:   Mon Jan 31 10:37:42 2011 -0800

commit b364f9dcec3b0d52666c4f03eb5f6efb7e1e7bda
Author: Michael
Date:   Wed Jan 26 13:33:17 2011 -0800

commit 4771e26619b9acba3f059b491c6c6d70115e696c
Author: Michael 
Date:   Wed Jan 26 11:16:51 2011 -0800

commit 6e559cb951b9bfa14243b925c1972a1bd2586d59
Author: Michael 
Date:   Fri Jan 21 11:42:27 2011 -0800

Как я могу отменить мои предыдущие 4 коммита локально в ветке? Другими словами, как я могу создать ветку без моих последних 4 коммитов (предположим, что у меня есть SHA этой фиксации из журнала git)?

Ответ 1

Чтобы создать новую ветку (локально):

  • С хешем фиксации (или его частью)

    git checkout -b new_branch 6e559cb
    
  • или вернуться назад 4 фиксации из HEAD

    git checkout -b new_branch HEAD~4
    

Как только ваша новая ветка будет создана (локально), вы можете захотеть реплицировать это изменение на удаленном носителе с тем же именем: Как я могу нажать мои изменения на удаленную ветвь


Для отбрасывания последних трех коммитов, см. ответ Lunaryorn ниже.


Для переноса текущего HEAD ветки на указанную фиксацию без создания новой ветки, см. Arpiagar ниже.

Ответ 2

Все приведенные выше команды создают новую ветку, а последняя фиксация - та, которая указана в команде, но на всякий случай, когда вы хотите, чтобы ваша текущая ветка HEAD переместилась к указанному commit, ниже приведена команда

 git checkout <commit_hash>

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


Затем вы можете вернуться к последней фиксации и исправить отсоединенную HEAD:

Исправить Git отдельную голову?

Ответ 3

Если вы хотите выбросить последние четыре коммита, используйте:

git reset --hard HEAD^^^^

В качестве альтернативы вы можете указать хеш фиксации, которую хотите reset, чтобы:

git reset --hard 6e559cb

Ответ 4

Просто выполните проверку фиксации, с которой вы хотите начать свою новую ветку, и создайте новую ветку

git checkout -b newbranch 6e559cb95