Yanlışlıkla git push -f'den nasıl kurtulabilirim?


13

Sadece git push -fyanlışlıkla koştum , böylece uzak bir dalın üzerine yazdım .

Orijinal:

(remote origin:)
    branch master -> commit aaaaaaa
    branch foo    -> commit bbbbbbb

(local)
    branch master -> commit ccccccc
    branch foo    -> commit ddddddd

Sonra git push -f:

(remote origin:)
    branch master -> commit ccccccc
    branch foo    -> commit ddddddd

Benim yerel depo, ben üzerinde çalışıyorum masterben şube geri yükleyebilirsiniz böylece, şube masterişlemeye aaaaaaaişlemediğim olsun, çünkü aaaaaaagelen git reflog. Ancak, daha bbbbbbbönce çekemediğim için taahhüt alamadım git push -f.

git reflogUzak depoda denedim , ancak çıplak depoda reflogda yararlı bir şey yok.

Uzak depoda işlem fooyapmak için şubeyi nasıl geri yükleyebilirim bbbbbbb?

(PS Gerçek değerini bilmiyorum bbbbbbb.)


Ancak uzak repo çıplak bir repo.
Xiè Jìléi

Yanıtlar:


12

Bunu dene:

  1. Uzaktan kumandayı SSH üzerinden bağlayın.

  2. Tüm uzak deponun yedeğini alın.

    tar cvzf project-backup.tgz /path/to/project.git
    
  3. Eğer biliyorsanız, en azından ilk birkaç karakteri bbbbbbbkullanımı, git show bbbbbbve / veya git log bbbbbbtam karma işlemek öğrenmek için. (Sadece hash'a ihtiyacınız varsa, git rev-parse bbbbbbaynı zamanda işe yarayacaktır, ancak kontrol etmek her zaman daha iyidir.)

    Eğer değer bilmiyorsanız hiç çalıştırın git fsckve "sarkan kaydedilmesini" bir listesini almak gerekir. Doğru olanı bulana kadar git show <hash>ve kullanarak her taahhüdü inceleyin git log <hash>.

  4. Şube referanslarını güncelleyin:

    echo aaaaaaaaaaaaaaa.... > refs/heads/master
    echo bbbbbbbbbbbbbbb.... > refs/heads/foo
    
  5. Doğru dalları geri yüklediğinizden emin olmak için git log masterve tuşlarını kullanın git log foo.


Teşekkürler, sarkan dalı kurtarmıştım git fsck.
Xiè Jìléi

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.