Как сделать обратное нанесение тайника?

У меня есть небольшой патч, сохраненный в моем git-хранилище. Я применил его к своей рабочей копии с помощью git stash apply. Теперь я хотел бы отменить эти изменения, применив патч в обратном порядке (что-то вроде того, что делает git revert, но в отношении хранилища).

Кто-нибудь знает, как это сделать?

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

Не похоже, что stash поддерживает это в настоящее время, но git stash apply --reverse было бы хорошей возможностью.

Комментарии к вопросу (2)

git stash[save] берет состояние вашего рабочего каталога и состояние индекса и прячет их, устанавливая индекс и рабочую область в версию HEAD.

git stash apply возвращает эти изменения, так что git reset --hard удалит их снова.

git stash pop возвращает эти изменения и удаляет верхнее спрятанное изменение, так что git stash [save] вернется к предыдущему (до открытия) состоянию в этом случае.

Комментарии (0)
git checkout -f

будут удалить не фиксировать изменения.

Комментарии (3)

Прямой крой вставить N от страница ЖКТ Это'ы четко сформулировано и даже включает в себя псевдоним;

ООН-применение заначку В некоторых случаев применения может потребоваться, чтобы применить спрятал изменения, сделать какую-то работу, а затем применить те изменения, которые изначально пришли из тайника. Git не предоставить такую команду отменить заначку, но можно добиться эффекта путем простого извлечения патча, связанных с набором и применяя его в обратном:

$ git stash show -p stash@{0} | git apply -R

Опять же, если вы не указать тайник, git будет использовать самые последние заначки:

$ git stash show -p | git apply -R

Возможно, вы захотите создать псевдоним и эффективно добавить в заначке-отменить команду в Git. Например:

$ git config --global alias.stash-unapply '!git stash show -p | git apply -R'
$ git stash apply
$ #... work work work
$ git stash-unapply
Комментарии (1)

Это давно назрело, но если я правильно интерпретирую проблему, я нашел простое решение, обратите внимание, это объяснение в моей собственной терминологии:

git stash [save] сохранит текущие изменения и установит вашу текущую ветку в "чистое состояние"

git stash list выдает что-то вроде: stash@{0}: On develop: saved testing-stuff

git apply stash@{0} установит текущую ветку как before stash [save].

git checkout . установит текущую ветку как after stash [save].

Код, сохраненный в тайнике, не потерян, он может быть найден с помощью git apply stash@{0} снова.

В любом случае, это сработало для меня!

Комментарии (1)

В дополнение к @Грег ответа беконом, в случае, если двоичные файлы были добавлены в индекс и часть заначки, используя

git stash show -p | git apply --reverse

может привести к

error: cannot apply binary patch to '' without full index line
error: : patch does not apply

Добавление `--Binary, а решает проблему, но, к сожалению, не'т понял, почему еще.

 git stash show -p --binary | git apply --reverse
Комментарии (0)

Это в дополнение к выше ответы, но добавляет поиск заначку контроля версий Git на сообщение как спрятать номер может измениться, когда новый тайниках сохраняются. Я написал пару функций в bash:

apply(){
  if [ "$1" ]; then
    git stash apply `git stash list | grep -oPm1 "(.*)(?=:.*:.*$1.*)"`
  fi
}
remove(){
  if [ "$1" ]; then
    git stash show -p `git stash list | grep -oPm1 "(.*)(?=:.*:.*$1.*)"` | git apply -R
    git status
  fi
}
  1. Создать заначку с именем (сообщение) в Git тайник$ сэкономить на "заначке"в
  2. В appply названный $ обращаться на "заначке"в
  3. Чтобы удалить именованный заначку $ удалить и"заначке"в
Комментарии (0)

как применять заначка?

Кроме того, что уже упоминалось, самый простой способ это сначала сделать

git reset HEAD

и после проверки все локальные изменения

git checkout . 
Комментарии (0)