LINUX.ORG.RU

Как в Git вернуться к последнему коммиту?

 


0

3

Я вот чего не понимаю.

Решил посмотреть состояние проекта на пару коммитов назад. Дал команду:

git checkout хешСтарогоКоммита

Посмотрел, ничего не менял. Решил вернуться к последнему коммиту. Даю команду:

git checkout хешПоследнегоКоммита

Проект переключился на последний коммит. Но проект находится в ненормальном состоянии:

> git status
HEAD detached at 9b93eec
nothing to commit, working directory clean

Отчего так происходит? Как по-нормальному вернуться в последнее закоммиченное состояние проекта?

Я могу сделать так: http://webhamster.ru/mytetrashare/index/mtb0/1413010541hzh3175lej

Но это по-моему слишком заковыристо для такого простого действия как «посмотреть что было и вернуться обратно».

★★★★★

А что не так ? по ссылке все правильно.

joy4eg ★★★★★
()

Возвращаться после однократного git checkout hash удобнее всего с помощью:

git checkout -
(Работает по аналогии с cd -.)

xaizek ★★★★★
()
Последнее исправление: xaizek (всего исправлений: 1)
Ответ на: комментарий от Deleted

git checkout HEAD

Часто вижу такую рекомендацию, но лично у меня эта команда правильно не работает. Git что ли из другой вселенной? Как был detached так и остается detached.

> git checkout HEAD

> git status
HEAD detached at 9b93eec
nothing to commit, working directory clean

Сработала бессмысленная команда:

git checkout имяВеткиГдеВыНаходитесь

Вот она переносит проект в последнее состояние нормально.

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от Deleted

git checkout HEAD

Наверное, имелось в виду:

git checkout HEAD@{1}
Так как восстановить сбитый HEAD переходом на него же не выйдёт.

xaizek ★★★★★
()
Ответ на: комментарий от Xintrea

Часто вижу такую рекомендацию, но лично у меня эта команда правильно не работает.

HEAD names the commit on which you based the changes in the working tree

грубо говоря, этот shortcut контексто-зависим, и может означать много разных вещей.

Сработала бессмысленная команда:

это была правильная команда.

имяВеткиГдеВыНаходитесь

это не совсем точное название. в состоянии detached head, ты не находишься ни в какой ветке. git checkout branchname просто переключила ветку на ту что ты захотел.

waker ★★★★★
()
Последнее исправление: waker (всего исправлений: 2)

git checkout ветка_с_которой_ты_работал

git reflog покажет тебе историю твоих перемещений по коммитам

Для того, чтобы «посмотреть состояние проекта на пару коммитов назад» не обязательно делать checkout, достаточно git show HEAD~2:путь_файла

annulen ★★★★★
()

Вторую команду нужно заменить на git checkout имяИсходнойВетки.

intelfx ★★★★★
()

Как по-нормальному вернуться в последнее закоммиченное состояние проекта?

HEAD@{1}, как уже советовали, наиболее близко к этому туманному определению.

посмотреть что было и вернуться обратно

почему нельзя было использовать diff?

waker ★★★★★
()
Ответ на: комментарий от waker

в состоянии detached head, ты не находишься ни в какой ветке. git checkout branchname просто переключила ветку на ту что ты захотел.

То есть, до того как нарвался на ошибку, нужно знать, в какой ветке находишься. Если не запомнил заранее - тогда ой?

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от waker

почему нельзя было использовать diff?

Потому что надо было скопилировать в предыдущем состоянии.

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от waker

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

Извини, но это мой сайт. Психика уже повреждена.

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от Xintrea

То есть, до того как нарвался на ошибку, нужно знать, в какой ветке находишься. Если не запомнил заранее - тогда ой?

во-первых, это не ошибка.

во-вторых, да, прежде чем что-то делать, ты должен знать на какой ветке ты это хочешь делать.

и, наконец, в третьих, reflog в помощь чтобы узнать где ты был и что делал до «ошибки».

Извини, но это мой сайт.

бггг

waker ★★★★★
()
Ответ на: комментарий от Xintrea

Если не запомнил заранее - тогда ой?

Нужно как-то определить, какие бранчи указывают на ваш коммит. Например, можно выполнить git branch -v, может как проще можно.

Sorcerer ★★★★★
()

Вернувшись из detached HEAD можно например сделав git checkout имя_ветки(например master)

Тогда этот самый HEAD будет уже не detached, а привязанный к ветке.

Курим маны тщательнее

Pinkbyte ★★★★★
()
Последнее исправление: Pinkbyte (всего исправлений: 1)

Ничего не поделаешь, это гит.

d_a ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.