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

Недавно я перешел из SVN в Git и немного запутался в чем-то. Мне нужно было запустить предыдущую версию script через отладчик, поэтому я сделал git checkout <previous version hash> и сделал то, что мне нужно было сделать.

Теперь я хочу вернуться к самой новой версии, но я не знаю хеш для нее. Когда я набираю git log, я не вижу его.

Как я могу это сделать? Кроме того, есть ли более простой способ изменить версии, чем путем ввода хэшей - что-то вроде "вернуться к двум версиям" или "перейти к самым хронологически недавним"?

Ответ 1

git checkout master должен сделать трюк. Чтобы вернуться к двум версиям, вы можете сказать что-то вроде git checkout HEAD~2, но лучше создать временную ветвь, основанную на этом времени, поэтому git checkout -b temp_branch HEAD~2

Ответ 2

Когда вы проверяете конкретную фиксацию, git создает отдельную ветку. Итак, если вы вызываете:

$ git branch 

Вы увидите что-то вроде:

* (detached from 3i4j25)
  master
  other_branch

Чтобы вернуться к головной ветке мастера, вам просто нужно проверить свою ветку мастера:

$ git checkout master

Эта команда автоматически удалит отдельную ветвь.

Если git checkout не работает, возможно, вы изменили файлы, конфликтующие между ветвями. Чтобы вы не потеряли код git, вам необходимо иметь дело с этими файлами. У вас есть три варианта:

  • Сбрасывайте свои изменения (вы можете выкладывать их позже):

    $ git stash
    
  • Отменить изменения reset - отделить ветвь:

    $ git reset --hard
    
  • Создайте новую ветку с предыдущими изменениями и скопируйте их:

    $ git checkout -b my_new_branch
    $ git add my_file.ext
    $ git commit -m "My cool msg"
    

После этого вы можете вернуться к своей основной ветке (самая последняя версия):

$ git checkout master

Ответ 3

Это помогло мне (я все еще был в основной ветке):

git reset --hard origin/master

Ответ 4

Вы можете проверить, используя имена ветвей, с одной стороны.

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

Я просто хотел предложить gitk --all - мне было очень полезно при запуске с git.

Ответ 5

Я только начинаю копать глубже в git, поэтому не уверен, правильно ли я понимаю, но я думаю, что правильный ответ на вопрос OP состоит в том, что вы можете запустить git log --all с такой спецификацией формата, как это: git log --all --pretty=format:'%h: %s %d'. Это означает, что текущая версия вышла как (HEAD), и вы можете просто взять следующий из списка.

Кстати, добавьте псевдоним, подобный этому, в ваш .gitconfig со слегка улучшенным форматом, и вы можете запустить git hist --all:

  hist = log --pretty=format:\"%h %ai | %s%d [%an]\" --graph

Что касается относительных версий, я нашел этот пост, но он говорит только о более старых версиях, вероятно, нет ничего, чтобы ссылаться на более новые версии.

Ответ 6

Чтобы вернуться к последней версии:

git checkout <branch-name> 

Например, git checkout master или git checkout dev

Ответ 7

Когда вы вернетесь к предыдущей версии,

$ git checkout HEAD~2
Previous HEAD position was 363a8d7... Fixed a bug #32

Вы можете увидеть свой журнал функций (хэш) с этой командой даже в этой ситуации;

$ git log master --oneline -5
4b5f9c2 Fixed a bug #34
9820632 Fixed a bug #33
...

master можно заменить другим именем ветки.

Затем проверьте его, вы сможете вернуться к этой функции.

$ git checkout 4b5f9c2
HEAD is now at 4b5f9c2... Fixed a bug #34

Ответ 8

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

git checkout -

Укажет вам обратно на ветку, в которой вы были ранее (независимо от того, была ли она главной или нет).

Ответ 9

Более элегантным и простым решением является использование

git stash

Он вернется к самой резидентной локальной ветки ветки, а также сохранит ваши изменения в stash, поэтому, если вы хотите отменить это действие, выполните следующие действия:

git stash apply