Отмена случайного git stash pop



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



мой вопрос:Можно ли отменить Stash pop без отмены слияния?

617   3  

3 ответов:

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

С 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. переместить все изменения, включая изменения слияния обратно в тайник с помощью "git stash"
  2. запустите слияние еще раз и зафиксируйте свои изменения (без изменений из отброшенного тайника)
  3. запустите "git stash pop", который должен игнорировать все изменения из вашего предыдущего слияния, так как файлы теперь идентичны.

после этого вы остаетесь только с изменениями от тайник, который вы уронили слишком рано.

Comments

    Ничего не найдено.