Я хотел бы сделать следующий рабочий процесс:
- Добавить изменения на сцену.
- Спрятать все остальные изменения, которые не были поставлены.
- Делайте что-нибудь с вещами на стадии (например, сборка, запуск тестов и т. Д.)
- Примените тайник.
Есть ли способ сделать шаг 2?
пример
echo "123" > foo
git add foo # Assumes this is a git directory
echo "456" >> foo
git stash
cat foo # Should yield 123
man git stash
гораздо лучше.Ответы:
git stash save
есть опция,--keep-index
которая делает именно то, что вам нужно.Итак, беги
git stash save --keep-index
.источник
save
сgit stash
. Возможно, это программист, который настаивает на соблюдении симметрии с помощью apply / pop. :)git stash save
состоит в том, что он оставляет уже готовые изменения в вашей рабочей копии. В рабочем процессе выше это будет работать нормально, так как вы просто применяете тайник поверх локальной копии, в которой уже есть половина изменений в тайнике (этот мерзавец достаточно умен, чтобы его игнорировать). Но если вы отредактируете код перед повторным применением тайника, вы можете столкнуться с конфликтами слияния при переходе к применению. Fyi.git commit --ammend
если возникнут проблемы в том, что я совершил.--amend
(а не--ammend
)Это можно сделать за 3 шага: сохранить поэтапные изменения, спрятать все остальное, восстановить индекс с поэтапными изменениями. Что в основном:
Это будет делать именно то, что вы хотите.
источник
-u
также хранит неотслеживаемые файлы.git stash save --keep-index
делает с гораздо большей работой. Я не вижу никаких преимуществ.Также Re:
A: Потому что вы всегда должны проверять проверенный код :) Это означает, что вам нужно запускать тесты только с теми изменениями, которые вы собираетесь зафиксировать
Все это помимо того факта, что, как опытный программист, у вас есть врожденное желание протестировать и проанализировать только эти изменения - только отчасти шучу
источник
С
git version 2.7.4
вами можно сделать:git
Попросит вас добавить или нет изменений в притон.А ты тогда просто ответь
y
илиn
Вы можете восстановить рабочий каталог, как вы всегда это делаете:
или, если вы хотите сохранить сохраненные изменения в тайнике:
источник
Расширяя предыдущие ответы, я иногда делаю сложный набор изменений, но сначала хочу зафиксировать отдельное изменение. Например, я мог заметить ошибку или другой неправильный код, который я хотел бы исправить перед своими поэтапными изменениями. Один из возможных маршрутов:
сначала спрятать все, но оставить инсценированные изменения без изменений
спрятать поэтапные изменения тоже отдельно
внести изменения для исправления; и тестирование; совершить их:
Теперь восстановим ранее поставленные изменения:
разрешите все конфликты и обратите внимание, что если бы были конфликты, git применил, но не удалил эту запись верхнего тайма.
(... Затем зафиксируйте поэтапные изменения, восстановите тайник всех остальных изменений и продолжите ...)
источник
Чтобы добавить неразмеченные (не добавленные для фиксации) файлы в stash, выполните следующую команду:
Затем вы можете зафиксировать поставленные файлы. После этого вы можете вернуть последние сохраненные файлы с помощью команды:
источник
Сохранение только рабочего дерева (неустановленные изменения) в Git сложнее, чем должно быть. Принятый ответ хранит неустановленные изменения, но также сохраняет поэтапные изменения (и оставляет их также поэтапными), что редко является тем, что вы хотите.
Этот псевдоним работает хорошо:
Он временно фиксирует поэтапные изменения, создает тайник из оставшихся изменений (и позволяет передавать дополнительные аргументы, такие как
--include-untracked
и,--message
в качестве аргументов псевдонима), а затем сбрасывает временную фиксацию для возврата поэтапных изменений.Это похоже на @Simon Кнапп ответ , но с некоторыми незначительными отличиями - он использует
--quiet
на временных мерах , принятых, и он принимает любое количество параметров для тайникаpush
, а не жесткого кодирования-m
, и он добавляет--soft
к финалу сбросить, чтобы индекс остался таким же, как и начался.Для противоположной проблемы хранения только поэтапных изменений (псевдоним
stash-index
) см. Этот ответ .источник
Еще один совет, связанный с вопросом:
Когда вы эффективно сохраняете свои неустановленные изменения, используя
Возможно, вы захотите дать тайнику сообщение, так что когда вы делаете
git stash list
это, становится более очевидным, что вы спрятали ранее, особенно если вы выполняете эту операцию при дальнейшем сохранении. Например(хотя на самом деле он содержит все изменения, как отмечено в других ответах).
Например, вышеизложенное может сразу сопровождаться:
Остерегайтесь, однако, что вы не можете затем использовать
восстановить только неустановленные изменения.
источник
У Git нет команды, которая хранит только ваши неустановленные изменения.
Однако Git позволяет вам указать, какие файлы вы хотите сохранить.
Если вы хотите сохранить только определенные изменения в этих файлах, добавьте эту
--patch
опцию.--include-untracked
Опция позволяет копить неотслеживаемые файлы.Запустите
git help stash
(илиman git-stash
) для получения дополнительной информации.Примечание. Если ваши неустановленные изменения довольно дезогенизированы, ответ @ alesguzik, вероятно, будет проще.
источник
Современная форма этой команды
git stash push [--] [<pathspec>...]
, так как Git 2.16+ (git stash save
устарела )Вы можете комбинировать это с подстановочной формой, например:
Но это не работает с Git для Windows, пока Git 2.22 (Q2 2019), см. Выпуск 2037 , учитывая, что
git stash
он был повторно реализован в C (вместо сценария оболочки)См. Коммит 7db9302 (11 марта 2019 г.) Томаса Гуммерера (
tgummerer
) .См. Коммит 1366c78 , коммит 7b556aa (07 марта 2019 г.) Йоханнеса Шинделина (
dscho
) .(Слиты Junio C Hamano -
gitster
- в фиксации 0ba1ba4 , 22 Apr 2019)источник
Я использую псевдоним, который принимает строку для использования в качестве сообщения для записи тайника.
Который:
-u
или-a
),--soft
чтобы сохранить его в индексе).источник