У v2.24 git switch
- це щось на кшталт безпечного git checkout
.
Тому я перейменував псевдонім нижче git hop
для
«стрибка на гілці , не змінюючи worktree»
Для користі читача:
Хоча я вважаю, що рішення Чарльза Бейлі є правильним, це рішення потребує налаштування під час переходу на щось, що не є локальною гілкою. Також повинен бути якийсь спосіб, як це зробити за допомогою звичайних команд, який легко зрозуміти. Ось що я придумав:
git checkout --detach
git reset --soft commitish
git checkout commitish
Пояснили:
git checkout --detach
те саме, git checkout HEAD^{}
що залишає поточну гілку позаду і переходить у "відокремлений головний стан". Тож наступна модифікація HEAD
більше не стосується жодної галузі. Процедура відключення HEAD
не впливає на worktree , ні індекс.
git reset --soft commitish
потім переходить HEAD
до SHA даного commitish
. Якщо ви хочете оновити індекс, також залишайте --soft
подалі, але я не рекомендую цього робити. Це, знову ж таки, не торкається робочого дерева та ( --soft
) не індексу.
git checkout commitish
потім знову приєднується HEAD
до даної commitish
(гілки). (Якщо commitish
це SHA, нічого не відбувається.) Це також не впливає на індекс і робоче дерево.
Це рішення приймає все, що стосується зобов'язання, тому це ідеально підходить для деяких git
псевдонімів. rev-parse
Нижче просто тест , щоб переконатися, нічого не ламається в ланцюжку, так що помилки не випадково включать в окрему главу держави (відновлення помилок будуть шлях більш складним).
Це призводить до наступного git hop treeish
псевдоніму:
git config --global alias.hop '!f() { git rev-parse --verify "$*" && git checkout "HEAD^{}" && git reset --soft "$*" && git checkout "$*"; }; f'
FYI, ви можете знайти його в моєму списку git
псевдонімів .