Отмена случайного git stash pop
Я спрятал некоторые локальные изменения перед выполнением сложного слияния, сделал слияние, а затем тупо забыл совершить перед запуском git stash pop. Pop создал некоторые проблемы (плохие вызовы методов в большой кодовой базе), которые трудно отследить. Я побежал git stash show, ну я по крайней мере знаю, какие файлы были изменены. Если ничего другого, я думаю, что это урок, чтобы совершить больше.
мой вопрос:Можно ли отменить Stash pop без отмены слияния?
3 ответов:
попробуйте использовать как восстановить упавший тайник в Git?, чтобы найти тайник вам заскочил. Я думаю, что всегда есть две фиксации для тайника, так как он сохраняет индекс и рабочую копию (поэтому часто фиксация индекса будет пустой). Тогда
git showих, чтобы увидеть разницу и использоватьpatch -Rчтобы отменить их.
С
git stash --helpRecovering 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это помогло мне лучше, чем принятый ответ с тем же сценарием.
Если ваше слияние не было слишком сложным, другим вариантом было бы:
- переместить все изменения, включая изменения слияния обратно в тайник с помощью "git stash"
- запустите слияние еще раз и зафиксируйте свои изменения (без изменений из отброшенного тайника)
- запустите "git stash pop", который должен игнорировать все изменения из вашего предыдущего слияния, так как файлы теперь идентичны.
после этого вы остаетесь только с изменениями от тайник, который вы уронили слишком рано.
Comments