Как не коммитя и не теряя изменения переключиться на другую ветку Git.
Оказалось, что многие разработчики не знают, что можно не создавать коммит изменений в коде, чтобы переключиться на другую ветку, что-то поправить и вернуться к своей текущей задаче.
Бывает удобно, когда нужно быстро пофиксить баг и вернуться.
1. Способ через git stash
Если вы внесли изменения в вашем рабочем каталоге и хотите переключиться на другую ветку без коммита, вы можете использовать `git stash`. Это временно сохранит ваши изменения и очистит рабочий каталог.
Вот шаги:
- Сохраните изменения с помощью stash:
git stash
- Переключитесь на другую ветку:
git checkout [имя_ветки]
- Если вы захотите вернуть свои изменения на текущей ветке, используйте:
git stash apply
Если у вас несколько сохраненных изменений в stash, вы можете увидеть список всех stash с помощью:
git stash list
И применить конкретный stash с помощью:
git stash apply stash@{номер}
Учтите, что `git stash apply` применяет изменения, но оставляет их в stash. Если вы хотите применить изменения и удалить их из stash, используйте:
git stash pop
2. Способ через git worktree
git worktree позволяет вам иметь несколько рабочих копий одного репозитория. Таким образом, вы можете работать в одной ветке в одной рабочей копии, а в другой ветке — в другой рабочей копии.
- Добавление новой рабочей директории для другой ветки
Например, вы работаете над функцией в ветке `feature-x`, но вам также нужно срочно внести изменения в `master`.
git worktree add ../worktree-master master
Это создаст новую рабочую директорию `worktree-master`, где активной будет ветка `master`.
- Создание новой ветки в новой рабочей директории
Если вы хотите начать работу над новой функцией и хотите, чтобы у нее была своя рабочая директория:
git worktree add ../worktree-feature-y feature-y
Если ветка `feature-y` еще не существует, она будет создана автоматически.
- Просмотр списка рабочих директорий
git worktree list
Это покажет вам все текущие рабочие директории и их связанные ветки.
- Удаление рабочей директории
Если вы закончили работу в дополнительной рабочей директории и хотите ее удалить
rm -rf ../worktree-feature-y
git worktree prune
Здесь мы сначала удаляем директорию, а затем говорим Git очистить устаревшие рабочие директории с помощью команды `prune`.
3. Самый не технологичный способ: сделать клон проекта в соседней дирректории
Да, можно сделать git clone репозитория в соседнюю дирректорию, сделать срочные изменения и запушить их, не трогая при этом ничего в текущей рабочей копии.
У меня есть 2 локальные копии проекта