Właśnie git push -f
przez pomyłkę uciekłem, zastępując w ten sposób zdalną gałąź.
Oryginał:
(remote origin:)
branch master -> commit aaaaaaa
branch foo -> commit bbbbbbb
(local)
branch master -> commit ccccccc
branch foo -> commit ddddddd
Po git push -f
:
(remote origin:)
branch master -> commit ccccccc
branch foo -> commit ddddddd
W moim lokalnym repozytorium pracuję nad master
gałęzią, więc mogę przywrócić gałąź master
do zatwierdzenia aaaaaaa
, ponieważ mogę uzyskać zatwierdzenie aaaaaaa
z git reflog
. Jednak nie mogłem uzyskać zatwierdzenia, bbbbbbb
ponieważ wcześniej nie ciągnąłem git push -f
.
Próbowałem git reflog
w zdalnym repozytorium, ale nie ma nic przydatnego w ponownym logowaniu w czystym repozytorium.
Jak mogę przywrócić gałąź foo
do zatwierdzenia bbbbbbb
w zdalnym repozytorium?
(PS Nie znam rzeczywistej wartości bbbbbbb
.)
git
file-recovery
Xiè Jìléi
źródło
źródło
Odpowiedzi:
Spróbuj tego:
Połącz się z pilotem przez SSH.
Wykonaj kopię zapasową całego zdalnego repozytorium.
Jeśli znasz przynajmniej kilka pierwszych znaków
bbbbbbb
, użyjgit show bbbbbb
i / lub,git log bbbbbb
aby znaleźć pełny hash zatwierdzenia. (Jeśli potrzebujesz tylko skrótu,git rev-parse bbbbbb
będzie również działać, ale zawsze lepiej to sprawdzić).Jeśli nie zna wartości w ogóle uruchomić
git fsck
i powinieneś dostać listę „zwisające zobowiązuje”. Sprawdź każde zatwierdzenie za pomocągit show <hash>
i,git log <hash>
aż znajdziesz właściwy.Zaktualizuj odniesienia do oddziału:
Użyj
git log master
i,git log foo
aby przywrócić prawidłowe gałęzie.źródło
git fsck
.Prawdopodobnie inne usługi również to zapewniają. To oszczędza dzień.
źródło