Поиск…


Синтаксис

  • git stash list [<options>]
  • git stash show [<stash>]
  • git stash drop [-q|--quiet] [<stash>]
  • git stash ( pop | apply ) [--index] [-q|--quiet] [<stash>]
  • git stash branch <branchname> [<stash>]
  • git stash [save [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet] [-u|--include-untracked] [-a|--all] [<message>]]
  • git stash clear
  • git stash create [<message>]
  • git stash store [-m|--message <message>] [-q|--quiet] <commit>

параметры

параметр подробности
шоу Покажите изменения, записанные в кошельке, как разницу между сохраненным состоянием и исходным родителем. Когда нет <stash>, отображается последний.
список Перечислите сохраненные в данный момент штампы. Каждый тайник указан с его именем (например, stash @ {0} - это последний тайник, stash @ {1} - тот, который был ранее и т. Д.), Имя ветки, которая была текущей, когда был сделан тайник, и короткий описание фиксации основы.
поп Удалите из списка закладок одно спрятанное состояние и примените его поверх текущего рабочего дерева.
применять Подобно pop , но не удаляйте состояние из списка.
Чисто Удалите все сжатые состояния. Обратите внимание, что эти состояния будут подвергнуты обрезке и могут быть невозможны для восстановления.
падение Удалите из списка закладок одно спрятанное состояние. Когда нет <stash>, он удаляет последнюю. т.е. stash @ {0}, в противном случае <stash> должна быть действительной ссылкой журнала пробелов формы stash @ {<revision>}.
Создайте Создайте stash (который является обычным объектом фиксации) и верните его имя объекта, не сохраняя его нигде в пространстве имен ref. Это предназначено для использования в скриптах. Это, вероятно, не та команда, которую вы хотите использовать; см. «сохранить» выше.
хранить Храните заданный кошелек, созданный с помощью git stash create (который является обманывающим слиянием) в stash ref, обновляя stash reflog. Это предназначено для использования в скриптах. Это, вероятно, не та команда, которую вы хотите использовать; см. «сохранить» выше.

замечания

Stashing позволяет нам иметь чистый рабочий каталог без потери информации. Затем можно начать работать над чем-то другим и / или переключать ветви.

Что такое Stashing?

Когда вы работаете над проектом, вы можете быть на полпути через изменение ветки функции, когда ошибка связана с мастером. Вы не готовы совершать свой код, но также не хотите терять свои изменения. Именно здесь пригодится git stash .

Запустите git status на ветке, чтобы показать свои незафиксированные изменения:

(master) $ git status
On branch master
Your branch is up-to-date with 'origin/master'.
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:   business/com/test/core/actions/Photo.c

no changes added to commit (use "git add" and/or "git commit -a")

Затем запустите git stash чтобы сохранить эти изменения в стек:

(master) $ git stash
Saved working directory and index state WIP on master: 
2f2a6e1 Merge pull request #1 from test/test-branch
HEAD is now at 2f2a6e1 Merge pull request #1 from test/test-branch

Если вы добавили файлы в рабочий каталог, они также могут быть спрятаны. Вам просто нужно сначала сдать их.

(master) $ git stash
Saved working directory and index state WIP on master:
(master) $ git status
On branch master
Untracked files:
  (use "git add <file>..." to include in what will be committed)

        NewPhoto.c

nothing added to commit but untracked files present (use "git add" to track)
(master) $ git stage NewPhoto.c
(master) $ git stash
Saved working directory and index state WIP on master:
(master) $ git status
On branch master
nothing to commit, working tree clean
(master) $

В вашем рабочем каталоге теперь нет никаких изменений. Вы можете увидеть это, повторно запустив git status :

(master) $ git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean

Чтобы применить последний тайник, запустите git stash apply (кроме того, вы можете применить и удалить последнее спрятанное измененное с помощью git stash pop ):

(master) $ git stash apply
On branch master
Your branch is up-to-date with 'origin/master'.
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:   business/com/test/core/actions/Photo.c

no changes added to commit (use "git add" and/or "git commit -a")

Обратите внимание, однако, что удержание не помнит ветку, над которой вы работали. В приведенных выше примерах пользователь нажимал на master . Если они переключаются на ветвь dev , dev и запускают git stash apply последний тайник помещается в ветвь dev .

(master) $ git checkout -b dev
Switched to a new branch 'dev'
(dev) $ git stash apply
On branch dev
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:   business/com/test/core/actions/Photo.c

no changes added to commit (use "git add" and/or "git commit -a")

Создать кошелек

Сохраните текущее состояние рабочего каталога и индекс (также известный как промежуточная область) в стеке stashes.

git stash

Чтобы включить все незатребованные файлы в приложении, используйте флаги --include-untracked или -u .

git stash --include-untracked

Чтобы включить сообщение с вашим кошельком, чтобы сделать его более легко идентифицируемым позже

git stash save "<whatever message>"

Чтобы оставить промежуточную область в текущем состоянии после сохранения, используйте флаги --keep-index или -k .

git stash --keep-index

Список сохраненных штампов

git stash list

В этом списке будут перечислены все стопки в стеке в обратном хронологическом порядке.
Вы получите список, который выглядит примерно так:

stash@{0}: WIP on master: 67a4e01 Merge tests into develop
stash@{1}: WIP on master: 70f0d95 Add user role to localStorage on user login

Вы можете обратиться к определенному типу по его имени, например stash@{1} .

Показать кошелек

Показывает изменения, сохраненные в последнем тайме

git stash show

Или конкретный тираж

git stash show stash@{n}

Чтобы показать содержимое изменений, сохраненных для конкретного заклада

git stash show -p stash@{n}

Снять сальник

Удалите все тайники

git stash clear

Удаляет последний тайник

git stash drop

Или конкретный тираж

git stash drop stash@{n}

Применить и удалить прикрытие

Чтобы применить последний тайник и удалить его из типа стека:

git stash pop

Чтобы применить конкретный штамп и удалить его из типа стека:

git stash pop stash@{n}

Применить штамп, не удаляя его

Применяет последний тайник, не удаляя его из стека

git stash apply

Или конкретный тираж

git stash apply stash@{n}

Восстановление ранее внесенных изменений

Чтобы получить последний тайник после запуска git stash, используйте

 git stash apply

Чтобы просмотреть список ваших кошельков, используйте

 git stash list

Вы получите список, который выглядит примерно так:

stash@{0}: WIP on master: 67a4e01 Merge tests into develop
stash@{1}: WIP on master: 70f0d95 Add user role to localStorage on user login

Выберите другой git stash для восстановления с номером, который отображается для кошелька, который вы хотите

git stash apply stash@{2}

Частичный задел

Если вы хотите сохранить только некоторые отличия в вашем рабочем наборе, вы можете использовать частичный тираж.

git stash -p

А затем в интерактивном режиме выберите, какие кучки застревать.

Начиная с версии 2.13.0 вы также можете избежать интерактивного режима и создать частичный stash с помощью pathspec с использованием нового ключевого слова push .

git stash push -m "My partial stash" -- app.config

Применить часть кошелька с выпиской

Вы сделали кошелек и хотите проверить только некоторые файлы в этом тире.

git checkout stash@{0} -- myfile.txt

Интерактивное скрепление

Stashing берет грязное состояние вашего рабочего каталога - то есть ваши измененные отслеживаемые файлы и поэтапные изменения - и сохраняет его в стеке незавершенных изменений, которые вы можете повторно применить в любое время.

Удаление только измененных файлов:

Предположим, вы не хотите зашивать поэтапные файлы и только хранить измененные файлы, чтобы вы могли использовать:

git stash --keep-index

Это будет содержать только измененные файлы.

Сохранение невоспроизводимых файлов:

Stash никогда не сохраняет неиспользуемые файлы, а только сохраняет измененные и поэтапные файлы. Предположим, что если вам нужно также спрятать файлы без следа, вы можете использовать это:

git stash -u

это будет отслеживать не проверенные, поставленные и измененные файлы.

Только некоторые изменения:

Предположим, вам нужно занести только часть кода из файла или только некоторые файлы только из всех измененных и спрятанных файлов, тогда вы можете сделать это следующим образом:

git stash --patch

Git не будет хранить все, что было изменено, но вместо этого предложит вам интерактивно, какие из изменений вы хотели бы сохранить и которые вы хотели бы сохранить в своем рабочем каталоге.

Переместите свою работу в другую ветку

Если во время работы вы осознаете, что находитесь в неправильной ветке, и вы еще не создали никаких коммитов, вы можете легко переместить свою работу, чтобы исправить ветку, используя stashing:

git stash
git checkout correct-branch
git stash pop

Помните, что git stash pop применит последний тайник и удалит его из списка. Чтобы сохранить список в списке и примениться только к какой-либо отрасли, вы можете использовать:

git stash apply

Восстановить упавший штемпель

Если вы только что вытащили его и терминал все еще открыт, вы все равно будете иметь значение хэша, напечатанное git stash pop на экране:

$ git stash pop
[...]
Dropped refs/stash@{0} (2ca03e22256be97f9e40f08e6d6773c7d41dbfd1)

(Обратите внимание, что git stash drop также создает одну и ту же строку.)

В противном случае вы можете найти это, используя это:

git fsck --no-reflog | awk '/dangling commit/ {print $3}'

Это покажет вам все коммиты на кончиках вашего графика фиксации, которые больше не ссылаются ни на одну ветку, ни на тег - каждая потерянная фиксация, включая все сделанные вами котировки, будет где-то на этом графике.

Самый простой способ найти нужное вам сообщение - вероятно, передать этот список в gitk :

gitk --all $( git fsck --no-reflog | awk '/dangling commit/ {print $3}' )

Это запустит браузер репозитория, который покажет вам каждую фиксацию в репозитории , независимо от того, достигнут он или нет.

Вы можете заменить gitk там чем-то вроде git log --graph --oneline --decorate если вы предпочитаете хороший граф на консоли в отдельном графическом приложении.

Чтобы выявить фиксации закладок, найдите сообщения фиксации этой формы:

WIP на somebranch : commithash Некоторое старое сообщение фиксации

Как только вы узнаете хэш коммита, который вы хотите, вы можете применить его как кэш:

git stash apply $stash_hash

Или вы можете использовать контекстное меню в gitk для создания ветвей для любых недостижимых коммитов, которые вас интересуют. После этого вы можете делать с ними все, что хотите, со всеми обычными инструментами. Когда вы закончите, просто удалите эти ветви снова.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow