Как я могу сохранить определенный файл в Git, оставив другие измененные файлы не сохраненными?
Например, если у меня есть несколько измененных файлов, как показано в этом выводе git status:
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: app/controllers/cart_controller.php
# modified: app/views/cart/welcome.thtml
#
no changes added to commit (use "git add" and/or "git commit -a")
И я хочу сохранить только app/views/cart/welcome.thtml, какая правильная команда Git для этого? Я пробовал что-то вроде git stash save welcome_cart app/views/cart/welcome.thtml, но это не работает.
Вы можете спрятать конкретный файл в Git, оставив другие измененные файлы без изменений, используя несколько подходов. Наиболее прямой метод - использовать git stash push с указанием пути к конкретному файлу, который вы хотите спрятать.
Для вашего примера, где вы хотите спрятать только app/views/cart/welcome.thtml, вот правильные решения:
Содержание
- Базовое решение: Спрятать конкретные файлы
- Альтернативные методы
- Практические примеры
- Управление несколькими стэшами
- Лучшие практики
Базовое решение: Спрятать конкретные файлы
Наиболее прямой подход - использовать git stash push с указанием пути к конкретному файлу:
git stash push -m "Спрятать welcome.thtml" app/views/cart/welcome.thtml
Эта команда:
- Создаст новую запись стэша, содержащую только указанный файл
- Оставит
app/controllers/cart_controller.phpнеизменным в вашем рабочем каталоге - Добавит описательное сообщение “Спрятать welcome.thtml” для идентификации стэша
Общий синтаксис:
git stash push -m "<сообщение>" <путь/к/файлу>
Альтернативные методы
Метод 1: Использование git stash create и git stash store
Этот двухэтапный подход дает вам больше контроля:
# Создать стэш для конкретного файла
STASH_ID=$(git stash create -m "Спрятать welcome.thtml" app/views/cart/welcome.thtml)
# Сохранить стэш
git stash store -m "Спрятать welcome.thtml" $STASH_ID
Метод 2: Временное добавление и спрятание
Вы можете временно добавить конкретный файл, спрятать его, а затем отменить добавление:
# Добавить конкретный файл
git add app/views/cart/welcome.thtml
# Спрятать проиндексированные изменения
git stash
# Отменить добавление файла
git reset HEAD app/views/cart/welcome.thtml
Метод 3: Использование git stash save (Устаревший)
Хотя git stash save устарел, он все еще работает в большинстве версий Git:
git stash save "Спрятать welcome.thtml" app/views/cart/welcome.thtml
Однако git stash push является рекомендуемым современным подходом.
Практические примеры
Рассмотрим ваш конкретный сценарий шаг за шагом:
- Проверьте текущее состояние:
git status
- Спрячьте только welcome.thtml:
git stash push -m "Спрятать welcome.thtml" app/views/cart/welcome.thtml
- Проверьте результат:
git status
После выполнения этой команды ваше состояние должно показать:
app/controllers/cart_controller.phpвсе еще изменен (не спрятан)app/views/cart/welcome.thtmlбольше не в рабочем каталоге (он в стэше)
Чтобы восстановить спрятанный файл позже:
git stash pop stash@{0}
Управление несколькими стэшами
Когда вы прячете конкретные файлы, у вас будет несколько записей стэша. Вот как их управлять:
Перечислить все стэши:
git stash list
Применить конкретный стэш:
git stash apply stash@{0} # Применить первый стэш
git stash apply stash@{1} # Применить второй стэш
Извлечь конкретный стэш (удалить его после применения):
git stash pop stash@{0}
Удалить конкретный стэш (удалить без применения):
git stash drop stash@{0}
Просмотреть содержимое стэша:
git stash show stash@{0}
git stash show -p stash@{0} # Показать подробный патч
Лучшие практики
- Используйте описательные сообщения при спрятании конкретных файлов:
git stash push -m "Частичное исправление: обновлен вид приветствия корзины" app/views/cart/welcome.thtml
- Проверяйте перед спрятанием:
git diff app/views/cart/welcome.thtml
# Проверьте изменения, которые вы собираетесь спрятать
- Учитывайте порядок операций при спрятании нескольких файлов отдельно:
- Спрячьте файлы, которые готовы к сохранению позже
- Оставляйте файлы, над которыми вы активно работаете, в рабочем каталоге
-
Используйте
git stash pushвместоgit stash save- первый является современным, предпочтительным синтаксисом -
Всегда проверяйте состояние после спрятания, чтобы убедиться, что вы достигли желаемого результата:
git status
Ключевое преимущество спрятания конкретных файлов заключается в том, что оно позволяет сохранять прогресс по определенным файлам, продолжая работать над другими, делая ваш workflow более гибким и организованным.