2010-03-18 17 views
6

Dizüstü bilgisayarımda yerel bir Git repo oluşturdum ve daha sonra uzak bir şube oluşturarak kaynağı Heroku'ya taşıdım. Birkaç gün süren taahhüt ve iadelerin ardından, daha önceki bir işleme geri dönmem gerekiyor. İşte yaptığım şey.Git checkout <SHA> ve Heroku

cd <app root> 
git checkout 35fbd894eef3e114c814cc3c7ac7bb50b28f6b73 

Birisi ödeme yapıyor yeni bir çalışma ağacı değil dal kendisi yarattı söyledi, bu yüzden Heroku için geri alma değişiklikleri düğmeye dokunulduğunda, her şeyin itildi tarih ve hiçbir şey vereceğini söyledi. Bu durumu nasıl düzeltirim? Yardımınız için şimdiden teşekkür ederiz.

cevap

8

sen (nesneyi işlemek SHA-1 hash kullanarak) doğrudan işlemek isim ödeme yaparken yerine şube adını kontrol etmeyi, bir “müstakil ile bitirmek BAŞ”. HEAD, şu anda kontrol edilenlerin kaydını tutan “ref” dir. Bir şube yerine doğrudan bir ödeme yapıldığında ayrılır (herhangi bir şubeye bağlı değildir). Bir havuzun HEAD'sini ayırdığınızda hiçbir şube güncellenmez. Ayrılmış bir ana devletin sanki bir anonim dalı olduğunu kontrol etmiş gibi düşünebilirsiniz.


senin deponun HEAD takın için, o dal dışında bir dal gibi güncel HEAD kaydetmek ve kontrol etmek isteyeceklerdir:

  1. bir yeni dalında geçerli HEAD kaydetmek için bunu :

    git branch <new-branch-name> 
    
  2. senkullanmaları gerekmektedir mevcut dalı üzerine yazmak için: Sonra

    git branch --force <existing-branch-name> 
    
  3. yeni/güncel şube kontrol ederek de deponun HEAD takın:

    git checkout <branch-name> 
    

    (<branch-name> bağlı <new-branch-name> veya <existing-branch-name>, aynı olduğu yukarıdaki iki hangisinin komutları bir ref noktası yapmak)

Bu sekans (git branch kullanılan Şu anki HEAD taahhüdüne, daha sonra güncellenen şube olan git checkout), çalışma dizininizde ve/veya ağacınızda sahip olabileceğiniz izinsiz içeriği ileriye taşıyacaktır.

git reset --hard <commit> 

Bu sıfırlar: Eğer 'geri almak' istiyorsanız Gelecekte


, önceki bazı mevcut şube size deponun HEAD ayrılması bu kullanmak yerine gerektiğini taahhüt Geçerli şube (veya önceden ayrılmışsa, ayrılan HEAD'ınız), söz konusu taahhütte bulunur ve indeksi ve çalışma ağacını bu taahhüdü yansıtır (yani, taahhüt edilen içerikle birlikte belirtilen taahhütten sonra herhangi bir taahhüt atar).

Ayrılmış HEAD durumu, eski durumları yeniden gözden geçirmek için yararlıdır ve bazen de kısa süreli çalışma için, tutacağınızdan emin olmadığınız anlamına gelir.Bunun dışında muhtemelen bunu önlemek istersiniz.

2

Sen sıfırlamak istiyorum:

git reset --hard 35fbd894eef3e114c814cc3c7ac7bb50b28f6b73
+0

Teşekkürler, bu çalışma ağacını tekrar şubeye mi çevirecek? – Bob

+0

Bu muhtemelen başlangıçta yapmanız gereken şeydi, ancak durumunuzu düzeltmez. HEAD'iniz hala ayrılırsa, bir şubeye tekrar takılmaz. Lütfen cevabımı gör. –

+1

Geçerli kafanızı belirtilen taahhütlere sıfırlar. Bu yüzden 'check-out master' (ya da geri almak istediğiniz herhangi bir şube) 'ne ihtiyacınız var ve daha sonra 'git reset' komutunu kullanmalısınız. – Chris