Программирование ARM Git: как переключаться между фиксациями Thu, November 21 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.


Git: как переключаться между фиксациями Печать
Добавил(а) microsin   

Один из первых вопросов, который возник у меня при изучении Git - как переключиться на более раннюю фиксацию (т. е. старый commit), чтобы вернуть предыдущее состояние рабочего каталога проекта?

1. Сначала командой git log выведите список фиксаций, чтобы узнать их хеши, например:

$ git log --pretty=oneline
1b11970fd272176da7872f5b9f7a6c2b5c95b4be (HEAD -> master, origin/master, origin/HEAD) 220209 рег. громк. Si4735
23cc805326427be3db40bcb5d2829311478d29b1 220201 косметические исправления в команде tp
f2459c4624ef818e06959ba5fe4c15c1e37d35d4 220127 Исправил влево-вправо для курсора
93daeff2400033f00e5adbf04fb68cab27e7f9ff 220123 Добавил кнопки TX и RX
509c2f29d919624d3b333fb819a08d94676652bd 220128 Исправил DEL, добавил индикатор РУС-ENG-dig
6c432e5613e0f099ec575833c5aabbc63e681df6 220115 Исправление режимов под клавиатуру TCA8418
65b292b712292b7ed6e88b7e5e2eadea480a52e9 220111 Исправил ошибку обработки ~INT для TCA8418
9048b714cbd83d3c3edffb5f8890ef9c935ef027 220110 Продолжение работы над TCA8418
2fb1f10e57de7bc3887574212172bb772c0d8f9f 220109 Начало добавления новой клавиатуры на TCA8418
1281f26518378f44ea669a3fd96317a391d7745c 211121 CMSIS в отдельной библиотеке
1f920bb4327e43b58b6b3f735a63a21759dab351 211120 Драйверы HAL в отдельной библиотеке
ab331d95634e248d9bbe4b291614e798c3ccc56d 220128 Исправил маяки и передачу.
7ad03121d46f6ef7c7f992aaff6f033f1d6d3dc8 211119 Исправил перекос в меню настроек
:

Подсказка: двоеточие в конце выведенного лога означает, что его можно либо продолжить клавишей Page Down (лог можно листать вверх/вниз клавишами прокрутки страниц), либо выйти из отображения лога в приглашение команд, если нажать на клавишу q.

2. Выберите тот commit, к которому хотите откатиться. Предположим, это будет фиксация с комментарием "220123 Добавил кнопки TX и RX", у которой хеш 93daeff2400033f00e5adbf04fb68cab27e7f9ff. Чтобы откатиться к этой фиксации, будем использовать команду git checkout, и для этого нам достаточно знать только шесть начальных HEX-символов хеша 93daef:

$ git checkout 93daef
Note: switching to '93daef'.
 
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.
 
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:
 
  git switch -c < new-branch-name>
 
Or undo this operation with:
  git switch -
 
Turn off this advice by setting config variable advice.detachedHead to false
 
HEAD is now at 93daeff 220123 Добавил кнопки TX и RX
 
microsin@DESKTOP-35RMF7F MINGW64 /d/asm/radiopager ((93daeff...))

Перевод выведенного текста после команды git checkout: "Внимание, произошло переключение на фиксацию '93daef'. Вы находитесь в состоянии 'отключенной головы'. Можно осмотреться, сделать экспериментальные изменения и сделать для них фиксацию (commit), и можно отменить любые фиксации, сделанные в этом состоянии, не оказывая влияния ни на какие ветки репозитория, переключившись обратно на любую ветку. Если нужно создать новую ветку для сохранения созданных фиксаций, то это можно сделать (сейчас или позже) использованием ключа -c командной строки, например git switch -c имяновойветки. Или можно отменить эту операцию командой git switch -. Отменить этот совет можно установкой переменной конфигурации advice.detachedHead в состояние false".

Что произошло? Те файлы в текущем каталоге, которые были сохранены в репозитории на момент фиксации 93daeff, и были изменены фиксациями после 93daeff будут перезаписаны в свое предыдущее состояние, которое было на момент фиксации 93daeff. Все остальные файлы останутся без изменений.

Внимание: когда файлы перезаписываются, у них меняется дата и время файла на текущие дату и время. Это может доставлять неудобство тем, кто привык смотреть на дату и время файла для дополнительной информации об истории его изменения.

Еще одно изменение, которое вносится в файлы при перезаписи. Если в текстовом файле конец строк был оформлен в стиле *nix (одиночным символом перевода строки LF, ASCII-код 0x0A, '\n'), то этот файл будет исправлен таким образом, что все одиночные символы 0x0A будут заменены на пару символов 0x0D 0x0A (окончания строк в стиле Windows, CR LF, '\r' '\n').

3. Вернуться обратно в начало истории фиксаций можно командой git checkout master:

$ git checkout master
Previous HEAD position was 93daeff 220123 Добавил кнопки TX и RX
Switched to a new branch 'master'
Branch 'master' set up to track remote branch 'master' from 'origin'.
 
microsin@DESKTOP-35RMF7F MINGW64 /d/asm/radiopager (master)

[Как принудительно переключиться на предыдущий commit]

Предположим, что вы сделали несколько изменений в проекте, и не хотите делать фиксацию (commit) этих изменений. И вам нужно переключиться на какую-то предыдущую фиксацию, сбросив все эти изменения. Для этого нужно сначала сбросить все изменения командой git reset --hard, а потом командой git checkout переключиться на нужную фиксацию, указав её контрольную сумму:

$ git reset --hard
$ git checkout 93daeff2400033f00e5adbf04fb68cab27e7f9ff

[Ссылки]

1. Краткий справочник по Git.
2Git: как восстановить потерянный commit?
3. Как вернуться (откатиться) к более раннему коммиту? site:stackoverflow.com.

 

Добавить комментарий


Защитный код
Обновить

Top of Page