Я спрятал некоторые локальные изменения перед выполнением сложного слияния, сделал слияние, затем тупо забыл зафиксировать перед запуском git stash pop
. Поп-музыка создала некоторые проблемы (неправильные вызовы методов в большой кодовой базе), которые трудно отследить. Я побежал git stash show
, поэтому я по крайней мере знаю, какие файлы были изменены. Если ничего другого, я думаю, это урок, чтобы совершать больше.
Мой вопрос: возможно ли отменить всплывающую подсказку, не отменяя также слияния?
git stash pop
без совершения первого. Что вы сделали для этого?git stash pop
после постановки изменений (хотя я не фиксировал) с версией gitstash pop/apply
прежде чем делать коммит, вы можете запуститьgit fsck --lost-found
. Эта команда будет перебирать висячие большие двоичные объекты (фактические файлы для тех, кто не знаком с терминологией git), которые были организованы, но нигде не зафиксированы (поэтому висят), и помещать их в каталог .git / lost-found / , где вы можетеgit show
их увидеть и увидеть если это файлы, которые вы ищете.Ответы:
Попробуйте использовать Как восстановить сброшенный тайник в Git? чтобы найти тайник, который вы нашли. Я думаю, что всегда есть два коммита для тайника, так как он сохраняет индекс и рабочую копию (поэтому часто индексный коммит будет пустым). Затем
git show
их, чтобы увидетьpatch -R
различия и использовать, чтобы отменить их.источник
git fsck --no-reflog | awk '/dangling commit/ {print $3}'
(по ссылке), и я просто вручную нашел проблему из этого diff. Спасибо!git diff -p ${STACH_SHA1}~1 ${STASH_SHA1} | patch -R -p1
:; Я попытался сgit show
как предложено, но его вывод не был хорош для патча; Кроме того, мне пришлось предоставить-p1
возможность исправления для удаления элементаa/..
and,b/..
которыйgit diff
помещается перед файлами, иначе он не будет разрешать пути из корня хранилища. ПРЕДЛОЖЕНИЕ: будьте осторожны и зафиксируйте беспорядок в отдельной ветке перед игрой с патчем.stash pop
и другое, иstash push
сработает коммит, который сохранит изменения в индексе и рабочем каталоге, верно?Из
git stash --help
Это помогло мне лучше, чем принятый ответ с тем же сценарием.
источник
Если ваше объединение не было слишком сложным, другой вариант:
После этого у вас останутся только те изменения, которые вы оставили слишком рано.
источник