На мой взгляд, самый простой способ «не делай этого» :-)
Вместо этого, превратить ваш git stash
содержимое в филиал своей собственной:
git stash branch newbr
Теперь у вас есть новый филиал newbr
, с индексом, готовым к фиксации (если у вас есть элементы git add
ed для индекса) и дерево работы, измененное в соответствии с приложением, готовое к отправке git add
ed и совершенное. Если вы тщательно добавили материал раньше, продолжайте и зафиксируйте это сейчас, затем добавьте все остальное и совершите еще раз. Если нет, просто добавьте все сейчас и совершите. Теперь у вас есть новая ветка newbr
с одним или двумя коммитами на нее - сколько зависит от количества git commit
s, которое вы только что сделали, - которое соединяется с тем, что было зафиксировано, когда вы сделали git stash
.
Теперь вы можете создать другую новую ветку с другой отправной точки, если это то, что вы хотите, и используйте git cherry-pick
для переноса этих коммитов, а затем отбросьте новую ветку. Или, вы можете использовать git rebase -i
(с аргументами <upstream>
и, необязательно, --onto
), чтобы скопировать коммиты в другом месте по обычной схеме переустановки, отменив первоначальные фиксации после завершения копирования. Или, если существующая начальная точка newbr
- это то, что вы хотели в конце концов, вы уже настроены.
Все, что сказал, если вы действительно сделать хотите просто проверить версию работы-древовидную конфликтующих файлов, полностью игнорируя текущую версию этих файлов, вы можете сделать это довольно легко. Важно помнить, что имя ссылки stash
(или [email protected]{N}
для некоторого числа N) относится к w
орк дерева фиксации, что git stash
сделал, когда он спас i
и w
фиксаций на stash bag. Следовательно:
git checkout stash -- path/to/file
извлекает версию path/to/file
w
, записав его через индекс (отсюда и решение любых конфликтные слияний), полностью игнорируя версию этого файла HEAD
.
(The i
NDEX-совершающие версии файлов в stash^2
, и если есть неотслеживаемый/все-файлы совершают эти файлы находятся в stash^3
, как я уже отмечал в that other answer. Хотя w
технически слияние совершить, это не является нормальным слиянием, и, в частности, совершение всех файлов очень необычно, поскольку у него есть только этих файлов и ни один из файлов индекса/дерева работ.)