Отмена случайного попсового треск - PullRequest
170 голосов
/ 01 июля 2011

Я спрятал некоторые локальные изменения перед выполнением сложного слияния, сделал слияние, затем тупо забыл зафиксировать перед запуском git stash pop. Поп создал некоторые проблемы (плохие вызовы методов в большой кодовой базе), которые трудно отследить. Я запустил git stash show, поэтому я по крайней мере знаю, какие файлы были изменены. Если ничего другого, я думаю, это урок, чтобы совершать больше.

Мой вопрос: возможно ли отменить всплывающую подсказку, не отменяя также слияния?

Ответы [ 3 ]

65 голосов
/ 01 июля 2011

Попробуйте использовать Как восстановить сброшенный тайник в Git? , чтобы найти тайник, который вы вытолкнули.Я думаю, что всегда есть два коммита для тайника, так как он сохраняет индекс и рабочую копию (поэтому часто индексный коммит будет пустым).Затем git show их, чтобы увидеть различия и использовать patch -R, чтобы отменить их.

34 голосов
/ 28 октября 2013

С git stash --help

Recovering stashes that were cleared/dropped erroneously
   If you mistakenly drop or clear stashes, they cannot be recovered through the normal safety mechanisms. However, you can try the
   following incantation to get a list of stashes that are still in your repository, but not reachable any more:

       git fsck --unreachable |
       grep commit | cut -d\  -f3 |
       xargs git log --merges --no-walk --grep=WIP

Это помогло мне лучше, чем принятый ответ с тем же сценарием.

1 голос
/ 31 января 2018

Если ваше объединение не было слишком сложным, другой вариант был бы:

  1. Переместить все изменения, включая изменения слияния, в stash, используя "git stash"
  2. Запустить объединениеснова и зафиксируйте ваши изменения (без изменений из удаленного хранилища)
  3. Запустите «git stash pop», который должен игнорировать все изменения из вашего предыдущего слияния, поскольку файлы теперь идентичны.

После этого у вас остаются только те изменения, которые хранятся в сундуке, который вы бросили слишком рано.

...