@sfletche, если вы хотите назвать ваш тайник, вам нужно сделать git stash save <name>, иначе, как вы говорите, это то же самое, что и git stash.
SgtPooki
5
После использования этого подхода кажется, что если вы вернетесь к предыдущей ветке, сохраненные изменения вернулись. Возможно ли сохранить только новые изменения на новой ветке?
Томас Хиггинботам
Просто внесите свои изменения в новую ветку.
ChrisR
2
@ThomasHigginbotham нет, рабочий каталог является общим для филиалов и копируется из одной в другую при переходе из одной ветви в другую. Для «достижения» того, что вы хотите, я обычно делаю различные тайники, добавляя полезное описание с помощью git stash save "description"команды, упомянутой ранее; а затем я git clearветвь (для уничтожения фактического рабочего каталога), а затем git stash apply stash@{my_desired_stash}в нужной ветке (после переключения на это с git checkout <branch>очевидно). Я знаю, что это не настоящее решение, но лучшее, что вы можете сделать с помощью git .
Kamafeather
Я также доработал это git stash dropпосле того, как совершил
oddmeter
221
Поскольку вы уже спрятали свои изменения, все, что вам нужно, это одна строка:
Создает и извлекает новую ветвь с именем < branchname >, начиная с коммита, в котором изначально был создан < stash >, применяет изменения, записанные в < stash >, к новому рабочему дереву и индексу. Если это удается, и < stash > является ссылкой на форму stash @ {< revision >}, он удаляет < stash >. Когда < stash > не указан, применяется последний.
Это полезно, если ветка, в которой вы запустили git stash save, изменилась настолько, что git stash не удалось применить из-за конфликтов. Поскольку хранилище применяется поверх коммита, который был HEAD во время запуска git stash, он восстанавливает исходно сохраненное состояние без конфликтов.
Для одиночных тайников это путь. Ссылка на имя хранилища не требуется, так как Git будет применять последний хранилище, переключаться на новую ветку и применять хранилище в 1 команде.
Зловещий
@RodneyGolpe Это, кажется, также применить тайник к «хозяину»? Что я хочу сделать, так это от 'master', git stash, а затем я ожидал, что 'git stash branch [branchname] применит stash к новой ветке, оставив master без правок?
Дэвид Дория
2
@DavidDoria Вы должны зафиксировать изменения в вашей новой ветке, прежде чем вернуться к мастеру.
Родни Голпе
Теперь это также передало изменения мастеру ... Я действительно в растерянности ... очевидно, я все еще не совсем понимаю git. После мягкого сброса мастера, затем вытащил из удаленного репо теперь я там, где я хотел быть. Мастер находится в состоянии до изменений. Новая ветка содержит изменения.
Ekkstein
1
Если у вас есть какие-то изменения в вашей рабочей области, и вы хотите сохранить их в новой ветке, используйте эту команду:
Ответы:
Стандартная процедура не работает?
git stash save
git branch xxx HEAD
git checkout xxx
git stash pop
Короче:
git stash
git checkout -b xxx
git stash pop
источник
git stash save "description"
команды, упомянутой ранее; а затем яgit clear
ветвь (для уничтожения фактического рабочего каталога), а затемgit stash apply stash@{my_desired_stash}
в нужной ветке (после переключения на это сgit checkout <branch>
очевидно). Я знаю, что это не настоящее решение, но лучшее, что вы можете сделать с помощью git .git stash drop
после того, как совершилПоскольку вы уже спрятали свои изменения, все, что вам нужно, это одна строка:
git stash branch <branchname> [<stash>]
Из документов ( https://www.kernel.org/pub/software/scm/git/docs/git-stash.html ):
источник
Если у вас есть какие-то изменения в вашей рабочей области, и вы хотите сохранить их в новой ветке, используйте эту команду:
Это сделает:
источник