Как вернуть git clean

У меня есть вопрос о потоке git.

Я работал над своим кодом в локальной ветке «разработчик» в git. Затем, после завершения работы, я добавил все измененные файлы и после этого зафиксировал их в своей локальной ветке «Разработчик». Затем я хотел проверить свою локальную «главную» ветку, чтобы вытащить новую версию из удаленной «главной» ветки, чтобы после этого объединить новую удаленную версию с моей от «разработчика».

Но проверка локального «мастера» от локального «разработчика» была прервана из-за некоторых неотслеживаемых файлов. К сожалению, я использовал git clean -f -x -d для очистки своего репозитория, и это удалило все файлы, даже зафиксированные. Я думал, что это удалит только неотслеживаемые. Однако я могу видеть свою фиксацию в инструменте расширений git, но с помощью git status он показывает, что много файлов было удалено.

Я знаю, что очистку нельзя отменить, но, поскольку я сделал фиксацию перед очисткой, могу ли я каким-то образом «проигнорировать» очистку, которую я сделал, вернувшись к моей последней фиксации, которую я сделал для своего локального разработчика?

Надеюсь, есть возможность.

Заранее большое спасибо.

РЕДАКТИРОВАТЬ: я сделал то, что было предоставлено, и это сработало. Я нахожусь в своем старом коммите, в который внесены изменения. Но, к сожалению, git clean удалил некоторые папки, необходимые для проекта. Теперь отсутствуют некоторые пути сборки, которые необходимы. Эти папки пусты, но все еще необходимы для работы проекта. Как я могу прочитать эти пустые папки, удаленные очисткой, которую я сделал? Вытягивание из источника/мастера не сработало. Там папки доступны.

С уважением, alfi92.


person alfi92    schedule 12.01.2018    source источник
comment
Вы можете использовать git reflog? Там есть что-нибудь, что могло бы помочь?   -  person JakeParis    schedule 12.01.2018
comment
Если вы знаете sha-код последнего успешного коммита в ветке разработчика. Просто сделайте сброс этого ша-кода.   -  person karthick    schedule 12.01.2018


Ответы (2)


У вас есть несколько вариантов:

  1. git reset --hard <commit-SHA> Это переместит указатель вашей ветки на <commit-SHA>. Все, что поставлено с git add, выбрасывается. Измененные файлы, которые не были подготовлены, также удаляются. Это самый большой молот, которым вы можете владеть. По сути, вы повторно клонировали репозиторий.
  2. git checkout -- . Это вернет все найденные измененные файлы, начиная с текущего каталога. Удаленные файлы, не отмеченные для удаления git rm, будут восстановлены. Это не удалит элементы из промежуточной области, которую вы предварительно подготовили с помощью git add. Если все, что вам нужно, это восстановить ранее зафиксированные файлы, я бы начал с этого.
person Ben    schedule 12.01.2018
comment
Спасибо. Ваш первый вариант сработал хорошо. но теперь некоторые папки, необходимые для пути к классу, исчезли, потому что они были пустыми. Вы знаете, как получить эти папки снова? - person alfi92; 13.01.2018
comment
Пустые папки не записываются в git. Например, вы не можете «git добавить» пустую папку, а затем «git commit». Если вы хотите, чтобы «пустые» папки были частью вашего репозитория, в папке должен быть какой-то файл-заполнитель, который будет добавлен/зафиксирован в вашем репозитории. - person Ben; 13.01.2018

Если вы знаете sha-код последнего успешного коммита в ветке разработчика. Просто сделайте сброс, используя этот ша-код. Это должно сбросить все указатели на старый успешный коммит, и вы вернете свои файлы.

git reset --hard shacode (успешной фиксации)

person karthick    schedule 12.01.2018