У 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псевдонімів .