Как переместить HEAD обратно в предыдущее место? (Отдельная головка)

В git я пытался выполнить squash commit, слияв в другую ветку, а затем перезагружая HEAD в предыдущее место через:

 git reset origin/master 

Но мне нужно выйти из этого. Как переместить HEAD обратно в предыдущее место?

У меня есть SHA1 frag ( 23b6772 ) коммита, который мне нужно переместить.
Как я могу вернуться к этой фиксации?

    3 Solutions collect form web for “Как переместить HEAD обратно в предыдущее место? (Отдельная головка)”

    Прежде чем ответить, добавьте немного фона, объяснив, что это за HEAD .

    First of all what is HEAD?

    HEAD – это просто ссылка на текущую фиксацию (последнюю) в текущей ветке.
    В любой момент времени может быть только один HEAD . (исключая git worktree )

    Содержимое HEAD хранится внутри .git/HEAD и содержит 40 байтов SHA-1 текущего фиксации.


    detached HEAD

    Если вы не используете последнюю фиксацию – это означает, что HEAD указывает на предыдущую фиксацию в истории, ее называют detached HEAD .

    введите описание изображения здесь

    В командной строке это будет выглядеть так: SHA-1 вместо имени ветки, так как HEAD не указывает на конец текущей ветви

    введите описание изображения здесь


    Несколько вариантов восстановления после отсоединенной головки:


    git checkout

     git checkout  git checkout -b   git checkout HEAD~X // x is the number of commits t go back 

    Это проверит новую ветвь, указывающую на требуемую фиксацию.
    Эта команда будет проверять заданную фиксацию.
    На этом этапе вы можете создать ветку и начать работать с этого момента.

     # Checkout a given commit. # Doing so will result in a `detached HEAD` which mean that the `HEAD` # is not pointing to the latest so you will need to checkout branch # in order to be able to update the code. git checkout  # create a new branch forked to the given commit git checkout -b  

    git reflog

    Вы всегда можете использовать reflog .
    git reflog отобразит любое изменение, которое обновило HEAD и проверив нужную запись reflog, вернет HEAD к этой фиксации.

    Каждый раз, когда HEAD изменяется, будет новая запись в reflog

     git reflog git checkout HEAD@{...} 

    Это вернет вас к вашей желаемой фиксации

    введите описание изображения здесь


    git reset --hard

    «Переместить» ваш HEAD обратно в желаемую фиксацию.

     # This will destroy any local modifications. # Don't do it if you have uncommitted work you want to keep. git reset --hard 0d1d7fc32 # Alternatively, if there's work to keep: git stash git reset --hard 0d1d7fc32 git stash pop # This saves the modifications, then reapplies that patch after resetting. # You could get merge conflicts, if you've modified things which were # changed since the commit you reset to. 
    • Примечание: ( Так как Git 2.7 )
      вы также можете использовать git rebase --no-autostash .


    git revert

    «Отменить» заданный диапазон фиксации или фиксации.
    Команда reset «отменяет» любые изменения, сделанные в данной фиксации.
    Новая фиксация с патчем отмены будет совершена, а исходная фиксация останется в истории.

     # add new commit with the undo of the original one. # the  can be any commit(s) or commit range git revert  

    Эта схема иллюстрирует, какая команда выполняет что.
    Как вы можете видеть, reset && checkout изменяет HEAD .

    введите описание изображения здесь

    Вот такой подход, который может быть очень простым и запоминающимся. Проверьте 2 условия и выполните команду 1. Затем ты снова на ходу.

    Если

    вы находитесь в «отдельной голове»
    (т. е. введите git status , вы увидите, что HEAD detached at )

    А также

    существующая отрасль соответствует вашим потребностям
    (т. е. введите git branch -v , вы увидите название ветки с соответствующими сообщениями фиксации, представляющими работу, которую вы хотите продолжить)

    затем

    просто проверьте эту ветку (т. е. введите git checkout ; вы увидите « Switched to branch ).

    Результаты

    Теперь вы можете продолжать добавлять и выполнять свою работу по-прежнему; изменения будут отслеживаться по .

    Обратите внимание: если вы сохранили работу, когда HEAD был отсоединен, в большинстве случаев эта работа будет автоматически объединена в описанном выше процессе. Если вы видите сообщение о конфликте слиянием, не паникуйте. Существует несколько замечательных руководств с простыми шагами для устранения конфликта и завершения слияния.

    Вопрос может быть прочитан как:

    Я был в состоянии отсоединения с HEAD на 23b6772 и набрал git reset origin/master (потому что я хотел раздавить). Теперь я передумал, как мне вернуться в HEAD на 23b6772 ?

    Прямой ответ: git reset 23b6772

    Но я столкнулся с этим вопросом, потому что мне стало больно печатать (копировать и вставлять) hashи фиксации или его аббревиатуру каждый раз, когда я хотел ссылаться на предыдущую HEAD и был Googling, чтобы увидеть, есть ли какая-либо стенография.

    Оказывается, есть!

    git reset - (или в моем случае git cherry-pick - )

    Что, кстати, было таким же, как cd - для возврата в предыдущий текущий каталог в * nix! Так ура, изучил две вещи одним камнем.

    Interesting Posts

    Как добавить приложение для запуска в качестве службы в Linux?

    Скорость вращения вентилятора не увеличивается в OpenSUSE. Pwmconfig не обнаруживает вентилятор

    Автоматическое сохранение всех посещенных страниц в Firefox

    Почему CTRL-клик не открывает некоторые ссылки на новой вкладке?

    Будет ли мой RAID0 оставаться неповрежденным, когда я переведу его на новый компьютер?

    Захват данных, отправляемых моим модемом ADSL

    Как использовать GhostScript для Windows для восстановления поврежденных файлов PDF

    Какой тип сокета intel более надежен в будущем?

    Как использовать rsync с ПК с ОС Windows на удаленном сервере Linux?

    Есть ли способ отключить этот анонимный удар барабана и приветствовать шум для Ubuntu

    Скорость передачи данных «логарифмически» уменьшается. Почему и может ли он быть улучшен?

    Как заменить или восстановить поврежденный установочный диск OS X?

    Что прошивка CR-48 позволяет установить Linux?

    Застрял в командной строке GRUB после регулярного обновления ядра

    Почему обновления Windows / Microsoft всегда требуют много времени для обнаружения доступных обновлений?

    Давайте будем гением компьютера.