Сведения о вопросе

Henry

16:03, 1st July, 2020

Теги

Как я могу отменить git сброс --жесткий HEAD~1?

Просмотров: 499   Ответов: 5

Можно ли отменить изменения, вызванные следующей командой? Если да, то как?

git reset --hard HEAD~1



  Сведения об ответе

DINO

18:03, 1st July, 2020

ПАТ Нотц прав. Вы можете получить коммит обратно, если это было в течение нескольких дней. git только мусор собирается примерно через месяц или около того, если вы явно не скажете ему удалить новые большие двоичные объекты.

$ git init
Initialized empty Git repository in .git/

$ echo "testing reset" > file1
$ git add file1
$ git commit -m 'added file1'
Created initial commit 1a75c1d: added file1
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 file1

$ echo "added new file" > file2
$ git add file2
$ git commit -m 'added file2'
Created commit f6e5064: added file2
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 file2

$ git reset --hard HEAD^
HEAD is now at 1a75c1d... added file1

$ cat file2
cat: file2: No such file or directory

$ git reflog
1a75c1d... HEAD@{0}: reset --hard HEAD^: updating HEAD
f6e5064... HEAD@{1}: commit: added file2

$ git reset --hard f6e5064
HEAD is now at f6e5064... added file2

$ cat file2
added new file

Вы можете видеть в примере, что file2 был удален в результате жесткого сброса, но был возвращен на место, когда я сбросил через рефлог.


  Сведения об ответе

davran

18:03, 1st July, 2020

То, что вы хотите сделать, это указать sha1 фиксации, которую вы хотите восстановить. Вы можете получить sha1, изучив рефлог ( git reflog ), а затем выполнив

git reset --hard <sha1 of desired commit>

Но не ждите слишком долго... через несколько недель git в конечном итоге увидит, что фиксация не была выполнена, и удалит все большие двоичные объекты.


  Сведения об ответе

JUST___

18:03, 1st July, 2020

Ответ скрыт в Подробном ответе выше, вы можете просто сделать:

$> git reset --hard HEAD@{1}

(См. выходные данные git reflog show )


  Сведения об ответе

SKY

18:03, 1st July, 2020

Его можно восстановить, если Git еще не собрал мусор.

Получите обзор висячих коммитов с fsck :

$ git fsck --lost-found
dangling commit b72e67a9bb3f1fc1b64528bcce031af4f0d6fcbf

Восстановление висячей фиксации с помощью rebase:

$ git rebase b72e67a9bb3f1fc1b64528bcce031af4f0d6fcbf


  Сведения об ответе

LAST

18:03, 1st July, 2020

Если вам действительно повезет, как мне, вы можете вернуться в свой текстовый редактор и нажать 'undo'.

Я знаю, что это не совсем правильный ответ, но это сэкономило мне полдня работы, так что надеюсь, что он сделает то же самое для кого-то другого!


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться