Похоже, что вы используете тайники, чтобы попытаться сделать то, что делает rebase, вместо того, чтобы просто делать это.Единственная реальная цель stash - отложить незафиксированные изменения, чтобы они не мешали какой-либо немедленной операции, которую вы хотите выполнить.Как только изменения зафиксированы, нет причин их скрывать - и на самом деле то, что вы пытаетесь сделать с тайниками, - это именно то, для чего был разработан rebase.
Теперь я предполагаю, что выв настоящее время нет никаких незафиксированных изменений, которые вы хотите сохранить.Вы можете использовать git status
, чтобы подтвердить, какие незафиксированные изменения, если таковые имеются, у вас есть.Как только ваше рабочее дерево станет чистым, я сделаю следующее:
(1) Перемотайте вашу локальную ветку до ее состояния, прежде чем вы начнете копить вещи.Вы можете использовать reflog для этого
git reflog vli-dev
, и это покажет вам все коммиты, на которые ссылается vli-dev
.Найдите последний локальный коммит, который вы сделали.У него будет имя вроде vli-dev@{14}
.(Число в фигурных скобках будет указывать, сколько изменений назад, поэтому 14
является лишь примером.) Затем вы бы
git checkout vli-dev
git reset --hard vli-dev@{14}
вернули вашу локальную ветвь в это состояние, восстановив все изменения, которые вы спрятали,Это также отменяет перебазирование, поэтому в следующий раз вам нужно
git rebase origin/master
. Это скопирует изменения каждого из ваших vli-dev
коммитов в новый коммит, основанный на только что выбранном master
коммите.
Теперь было бы неразумно беспокоиться о том, действительно ли промежуточные коммиты, созданные таким образом, действительно создают ошибки.(Это мое самое сильное замечание по поводу многих распространенных вариантов использования rebase
.) Вы можете проверить каждый из них и проверить его.Если вы обнаружите ошибку в каком-то промежуточном состоянии, вам придется решить, сколько хлопот стоит исправить.В этот момент вы можете создать новую ветвь из прерванного коммита, внести изменения, чтобы он прошел тесты, git commit --amend
, а затем переназначить оставшиеся коммиты в этот вновь исправленный коммит.
Другая вещьсделать, это очистить все те ненужные теперь тайники.Если у вас было множество действительно непринятых изменений, вы захотите применить их в своей перебазированной ветке;но остальное можно отбросить (git stash drop
).Или, если вы абсолютно уверены, что ни один из тайников не имеет важных данных, вы можете
rm .git/refs/stash
rm .git/logs/refs/stash