Чим відрізняється HEAD~1 від HEAD^?
Коротко
HEAD~1- це попередній коміт за ланцюгомHEAD^- це батько коміту
У звичайних (не merge) комітах вони однакові. Різниця з'являється тільки при merge.
HEAD~1 - крок назад по історії
Запис:
bash
HEAD~1Означає:
- «взяти першого батька»
- «перейти на один коміт назад»
Можна продовжувати:
bash
HEAD~2
HEAD~3Тобто ~ - це кількість кроків назад.
HEAD^ - батько коміту
Запис:
bash
HEAD^Означає:
- «перший батько поточного коміту»
Для merge-коміту є кілька батьків:
bash
HEAD^1 # перший батько
HEAD^2 # другий батькоДе з'являється різниця (ключовий момент)
Уявімо merge-коміт:
C---D (feature)
/ \
A---B-------M (main)HEAD→MHEAD^1→B(гілкаmain)HEAD^2→D(гілкаfeature)HEAD~1→B(завжди перший батько)
~ завжди йде по першій лінії історії,
^ дає вибір, якого батька взяти.
Важливий висновок для співбесіди
HEAD~1≡HEAD^якщо коміт не merge- при merge:
~- тільки основний шлях^- доступ до конкретних батьків
Коротка таблиця
| Запис | Що означає |
|---|---|
HEAD~1 | один коміт назад |
HEAD~2 | два коміти назад |
HEAD^ | перший батько |
HEAD^2 | другий батько (merge) |
Коротка відповідь для співбесіди
HEAD~1- це перехід на попередній коміт по основній лінії історії.HEAD^- це батько коміту. У звичайних комітах вони однакові, але при merge^дозволяє обрати конкретного батька, а~завжди йде по першому.
Часта помилка
«Це просто два способи написати одне й те саме» - неправильно. Вони збігаються тільки в лінійній історії.
Коротка відповідь
Для співбесідиPremium
Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.