HEAD
HEAD — это символическая ссылка на текущую запись проверки, то есть на запись фиксации, над которой вы работаете.
HEAD всегда указывает на самую последнюю фиксацию в текущей ветке. Большинство команд Git, изменяющих дерево коммитов, начинают с изменения того, на что указывает HEAD.
Мы можем понять это по следующей картинке:
HEAD->master->C1, HEAD указывает на master, master указывает на C1
HEAD обычно указывает на имя ветки (например, bugFix). При фиксации измените состояние bugFix, и это изменение станет видимым через HEAD.
Если вы хотите увидеть, на что указывает HEAD, вы можете проверить это с помощью cat .git/HEAD.Если HEAD указывает на ссылку, вы также можете использовать git symbolic-ref HEAD для проверки ее указания.
отсоединить ГОЛОВУ
Отдельный HEAD должен указывать на конкретную запись коммита, а не на имя ветки.
когда мы выполняемgit checkout C4
Когда команда выполняется, эффект показан на следующем gif:
С относительными ссылками вы можете начать отсчет с легко запоминающегося места (например, с ветки bugFix или HEAD).
относительная ссылка
Относительные ссылки очень эффективны, здесь я представляю два простых способа использования:
- использовать
^
Переместить вверх на 1 запись коммита - использовать
~<num>
Переместите вверх несколько записей коммитов, например~3
Относительная ссылка (^)
Помещение оператора (^) после имени ссылки указывает Git, что нужно найти родительский коммит указанного коммита.
так,master^
Эквивалентно «Родительскому узлу мастера»,master^^
Это второй родитель мастера.
воплощать в жизньgit checkout master^
, конкретный эффект показан на следующем gif-файле:
Относительная ссылка (~)
Если вы хотите продвинуться на много шагов вверх по дереву коммитов, введите столько^
Это кажется довольно раздражающим, конечно, Git учитывает это, поэтому вводит оператор~
.
Оператор может сопровождаться числом (необязательно, если не следует номер и^ 相同
, подняться один раз), укажите, сколько раз нужно подняться.
воплощать в жизньgit checkout master~2
, конкретный эффект показан на следующем gif-файле:
Отменить изменения
В Git есть много способов отменить изменения. Как и коммиты, отмена изменения состоит из низкоуровневой части (отдельный файл или сегмент в промежуточной области) и высокоуровневой части (как именно было отменено изменение). Наше приложение в основном связано с последним.
Есть два основных способа отменить изменения:
- git reset
- git вернуться.
Далее, давайте объясним один за другим:
git reset
git reset отменяет изменения, откатывая запись ветки на несколько записей фиксации. Вы можете думать об этом как о «переписывании истории». git reset перемещает ветку вверх, а запись фиксации, на которую указывает, такая же, как никогда не зафиксированная.
Хотя удобно использовать git reset в вашей локальной ветке, этот метод «перезаписи истории» недействителен для удаленных веток, которые все используют вместе!
воплощать в жизньgit reset master^
, конкретный эффект показан на следующем gif-файле:
git revert
Чтобы отменить изменения и поделиться ими с другими, нам нужно использовать git revert.
воплощать в жизньgit revert master^
, конкретный эффект показан на следующем gif-файле:
странность! Существует новая фиксация после записи фиксации, которую мы хотим отозвать! Это связано с тем, что новый коммит C2 внес изменения, которые использовались для отмены коммита C2. Другими словами, состояние C2' такое же, как у C1.
После возврата вы можете отправить свои изменения в удаленный репозиторий, чтобы поделиться ими с другими.
Публичный аккаунт WeChat:На мечеПожалуйста, обратите внимание на мою личную технологию общедоступного аккаунта WeChat, подпишитесь на дополнительный контентЯ считаю, что все в основном освоили продвинутые статьи о git, поэтому вы можете попробовать его в своей собственной среде git~