Есть ли команда git stash
, которая сохраняет ваши изменения, но также сохраняет их в рабочем каталоге? То есть в основном git stash; git stash apply
за один шаг?
Сохраняйте изменения, сохраняя изменения в рабочем каталоге в Git.
Ответы (5)
Что бы это ни стоило, другой способ сделать это — подготовить изменения, которые вы хотите сохранить, а затем спрятать все, используя --keep-index
:
$ git add modified-file.txt
$ git stash push --keep-index
Приведенные выше команды спрячут все, но файлы останутся в вашем рабочем каталоге.
Из официальной документации Linux Kernel Git для git stash
a> или из git-scm:
Если используется опция
--keep-index
, все изменения, уже добавленные в индекс, остаются нетронутыми.
git stash
, а затем git stash apply
(git stash && git stash apply
) спрячут файлы и применят stash сразу после него. Так что в конце концов у вас будут свои изменения в тайнике и в рабочем каталоге.
Вы можете создать псевдоним, если хотите, чтобы он был цельным. Просто поместите что-то вроде этого в ~/.gitconfig
:
[alias]
sta = "!git stash && git stash apply"
Недостатком этого подхода является то, что все файлы сохраняются и создаются заново. Это означает, что временные метки соответствующих файлов будут изменены. (Вызывает жалобу Emacs, когда я пытаюсь сохранить файл, если я открыл его до того, как сделал git sta
, и может вызвать ненужные перестроения, если вы используете make
или друзей.)
git stash; git stash apply
и git stash && git stash apply
?
- person Michael Dorst; 25.07.2013
&&
запускает вторую команду, только если первая возвращает нулевой статус код.
- person madhead; 25.07.2013
git config --global alias.sta "!git stash && git stash apply"
должен это сделать.
- person ; 25.07.2013
git stash save
с аргументом и затем сделать git stash apply
?
- person spinningarrow; 09.10.2014
Небольшое улучшение в ответе, которое на практике может быть использовано.
$ git add modified-file.txt
(OR $ git add . ---- for all modified file)
$ git stash save --keep-index "Your Comment"
Вы можете использовать git stash create
для создания коммита тайника, а затем сохранить его в тайнике с помощью git stash store
:
git stash store $(git stash create) -m "Stash commit message"
Это можно сохранить в псевдониме git, чтобы сделать его более удобным:
git config --global alias.stash-keep '!git stash store $(git stash create)'
git stash-keep -m "Stash commit message"
Обратите внимание, что это не делает всего, что делает git stash push
. Например, он не добавляет имя ветки к фиксации, например. stash@{0}: On myBranch: Stash commit message
.
man git-stash
говорит, что -m <message>
должен стоять перед хэшем коммита. За исключением того, что что-то изменилось в новейшем git.
- person tanius; 13.06.2020
save = "!f() { git stash store $(git stash create); }; f"
, который сработал.
- person jasongregori; 12.01.2021
Вам может помочь уловка, а не тайник, а FWIW:
git add -A
git commit -m "this is what's called stashing" (create new stash commit)
git tag stash (mark the commit with 'stash' tag)
git reset HEAD~ (Now go back to where you've left with your working dir intact)
Итак, теперь у вас есть тайник с тегами фиксации, в любом случае невозможно сделать git stash pop
, но вы можете делать такие вещи, как создание патча или сброс файлов и т. Д., Ваши рабочие файлы каталогов также остаются нетронутыми, кстати.
git stash && git stash apply
. Вы заметите, что ответы на этот вопрос сильно отличаются от моих. - person Michael Dorst   schedule 29.03.2020