Я сделал неправильное ускоренное слияние, и ветка master указывает на коммит, которого не должно быть. Возможно ли найти фиксацию до того, как я сделал ускоренную перемотку вперед (поэтому я возвращаю основную ветку к этой фиксации)?
нет удаленного также быстрая перемотка вперед до последней фиксации
Я не уверен, хранится ли эта информация где-нибудь во внутреннем каталоге git. Поэтому, если вы не использовали запрос на включение в github/bitbucket/gitlab для этого слияния, я думаю, вам нужно попробовать запомнить там, где это было раньше, извините.
Единственное, что я могу придумать, это проверить ваш упакованные ссылки:
$ cat .git/packed-refs
И посмотрите, указывает ли ваш мастер на предыдущую фиксацию, которая имеет для вас смысл.
Вы можете использовать git reflog
и оформить заказ на тот коммит, который хотите!
Запускаем git reflog master
и должны быть строчки вроде
bbb222 HEAD@{0}: merge xxxx: Fast-forward
aaa111 HEAD@{1}: foo bar baz
bbb222
— это текущая вершина master
, а aaa111
— та, что была до быстрого слияния. Восстановить master
в aaa111
git reset aaa111 --hard
git reset --hard
удаляет все незафиксированные изменения. Поэтому, если у вас есть незафиксированные изменения, сначала зафиксируйте или спрячьте их.
Спаси мой день, спасибо! Кстати, могу ли я использовать git reset --soft ?
@Qiulang --soft
сохраняет изменения с aaa111
на bbb222
в индексе и в рабочем дереве. Вы можете сохранить их, если это необходимо.
Также есть синтаксис @{}
для анализа журналов ссылок, с положительным числом он возвращает столько записей в reflog, master@{1}
— это то, как вы говорите git выполнить этот поиск для вас.
у вас есть пульт с правильным мастером?