GIT: Отсоединенная головка -> сделать текущую головку

#git #github #reset #head

Вопрос:

Я по ошибке записал большой файл tar с изображением докера, а затем нажал его. Когда я заметил, что толчок длится слишком долго, я прервал его. Затем я удалил tar и сделал новый коммит (вместо внесения изменений в предыдущий).

Я решил вернуться, выполнив a git reset -soft , удалить файл с добавленной фиксацией и внести изменения в эту фиксацию. (Я думаю, что я проверил фиксацию где-то в этой временной шкале) Затем я толкаю с ---force-with-lease

но теперь я получаю это со статусом git:

 HEAD detached from adc7f05
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
 

(неустановленные изменения являются лишь незначительным новым задним изменением — не относится к проблеме)

Что я должен сделать, чтобы сделать нынешнюю ситуацию главной?

рефлог git:

 dc82def (HEAD) HEAD@{0}: commit (amend): Fix conversion on all converters
adc7f05 HEAD@{1}: checkout: moving from master to HEAD@{3}
ffe3448 (remote-github/main, origin/master, master) HEAD@{2}: reset: moving to HEAD~2
adc7f05 HEAD@{3}: reset: moving to HEAD~1
7b5dbfb HEAD@{4}: commit: Remove tar
adc7f05 HEAD@{5}: commit: Fix conversion on all converters
588e4d5 HEAD@{6}: commit: Add multiline
ffe3448 (remote-github/main, origin/master, master) HEAD@{7}: commit: Add bulk page
84017af HEAD@{8}: commit: Add export possibility to all models
 

примечание: (Я нажимаю на два репозитория, следовательно, то, что отображается на ffe3448)

Спасибо

Ответ №1:

Ну, вы попросили перейти к пересмотру в рефлоге:

 checkout: moving from master to HEAD@{3}
 

Это означает, что вы запустили что-то вроде:

 git checkout HEAD@{3}
 

Это автоматически приведет вас к detached HEAD тому, что вы больше не работаете с филиалом. Итак, зачем вы это сделали? Я не знаю….. но вот что вы можете сделать, чтобы вернуться в нужное русло:

 git checkout 7b5dbfb
git reset --soft adc7f05
git commit --amend --no-edit
# now you have what you would like to have in master, right?
git branch -f master
git checkout master
# now you have to force-push in the other 2 repos (because you rewrote history)
 

Если вы не можете принудительно ввести репозитории, вам нужно обмануть их с помощью ревизии, следующей за мастером:

 git checkout 7b5dbfb
git reset --soft master
git commit -m "Correcting all the mess I did"
# this is a revision _after_ master that gets the content of the tree to what it was in 7b5dbfb
# if you like it:
git branch -f master
git checkout master
git push remote-github master:main
git push origin master