Как вернуться к последней версии в Git? - PullRequest
280 голосов
/ 24 августа 2010

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

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

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

Ответы [ 9 ]

340 голосов
/ 24 августа 2010

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

49 голосов
/ 24 февраля 2015

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

$ git branch 

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

* (detached from 3i4j25)
  master
  other_branch

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

$ git checkout master

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

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

  1. Храните ваши модификации (вы можете добавить их позже):

    $ git stash
    
  2. Отменить изменения, сбросив отдельную ветвь:

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

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

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

$ git checkout master
30 голосов
/ 01 августа 2013

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

git reset --hard origin/master
7 голосов
/ 24 августа 2010

Вы можете проверить с помощью имен веток, с одной стороны.

Я знаю, что есть несколько способов переместить ГОЛОВУ, но я оставлю это на усмотрение эксперта по git.

Я просто хотел предложить gitk --all - я нашел это чрезвычайно полезным, когда начинаю с git.

6 голосов
/ 10 ноября 2016

Для возврата к последней версии:

git checkout <branch-name> 

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

6 голосов
/ 27 октября 2011

Я только начинаю копать глубже в git, поэтому не уверен, правильно ли я понимаю, но я думаю, что правильный ответ на вопрос ОП заключается в том, что вы можете запустить git log --all с такой спецификацией формата: Это помечает текущую извлеченную версию как (HEAD), и вы можете просто взять следующую из списка.

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

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

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

4 голосов
/ 16 июня 2019

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

git checkout -

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

2 голосов
/ 10 мая 2016

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

$ 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
0 голосов
/ 29 ноября 2015

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

git stash

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

git stash apply
...