2011-01-07 10 views
78

,Son yüklemeyi bir git bare deposunda nasıl kabul edemiyorum? (Çıplak depoları endeksleri kullanmayın ve bir çalışma dizinini yok çünkü) çıplak depoda hiçbir anlam birkaç git komutları olduğunu dikkate alınarak

git reset --hard HEAD^ 

uncommit bir çözüm değildir Böyle bir depodaki son değişiklik. İnternet üzerinden arama

, tüm Ben konuya ilişkin bulabildiğim ben bunu yapmanın üç yolu takdim ediyorum ki this şöyledir:
1. "güncelleme elle ref (tesisat içerir)"; 2. "git push -f, çıplak olmayan bir depodan"; 3. "git branch -f this $that".

Bunun için hangi çözümün daha uygun olduğunu düşünüyorsunuz ya da bunu yapmak için başka hangi yollar var? Ne yazık ki, git çıplak depoları hakkında bulduğum belgeler oldukça zayıf. (-f) çıplak repo, (ancak yerel olmayan çıplak repo, sen söz olarak git reset --hard HEAD^) işlemek son kaldırmanızı klon eğer
ve geri itin:

+7

@ Lavinia-Garbriela Dobrovol Aşağıdaki karmaşık malzemeleri kullanmayın. HEAD'i farklı bir işleme taşımayı deniyorsunuz ve bu, git sıfırlamanın, hatta çıplak bir repoda bile amaçlanıyor. Aşağıdaki cevabım uyarınca, aşağıdakileri kullanın: git reset --soft --soft ile çalışma ağacını ve var olmayan bir dizini değiştirmeyi denemezsiniz; bu nedenle, sıfırlama sorunu çözmenize izin verir. – Hazok

cevap

107

git update-ref komutunu kullanabilirsiniz. son tamamlama kaldırmak için şunları kullanırsınız:

$ git update-ref HEAD HEAD^ 

Yoksa dalında değilseniz kaldırmak edemeyiz hangi son tamamlama:

$ git update-ref refs/heads/branch-name branch-name^ 

Ayrıca sha1 eğer geçebileceği istediğiniz:

$ git update-ref refs/heads/branch-name a12d48e2 

git-update-ref komutunun belgelere bakın.

+0

Çıplak repodaki KAFA doğru dalda ne var? – VonC

+0

@ Lavinia-Gabriela Dobrovolschi: Doğru, tam sözdizimini bilmiyorum. – VonC

+0

@VonC, 'git update-ref ' içinde, örneğin HEAD yerine "refs/heads/master" gibi doğru bir dal olması için belirtebilirsiniz. Umarım sorunuzu yanlış anlamış değilim. –

7

git push -f sorunsuz çalışır

  • , kaldırdığınızdan önceki diğer işlemler için SHA1 değiştirmezsiniz.
  • Çıplak repo öğesinin tam içeriğini ek bir ek taahhütle geri yüklediğinizden emin olabilirsiniz (çünkü ilk önce klonladıysanız).
+0

@ VonC Merhaba Von, Git'e çok cevap verdiğini gördüm, bu yüzden size sormak istedim ... Merak ettim, neden sıfırlama yapmam --soft ' KAFA'yı çıplak bir repoda taşımak için mi? – Hazok

+0

Sormak istediğim bir başka neden de, çıplak sürümler için yazılımsal sıfırlamanın kullanılması, kolayca bulunabilen bir bilgi olmaması ve pek çok forumun, en az yazım ve en az miktarda yazma nedeniyle en iyi uygulama olduğu anlaşılırsa, gereksiz karmaşık çözümlere sahip gibi görünüyor. hata şansı. – Hazok

+1

@Zach: a 'reset --soft 'doğrudan bir repo üzerinde yapıldığında çalışmalıdır. Bunun nadiren yapıldığından şüpheleniyorum çünkü çıplak bir repo genellikle bir ** yukarı yönlü repo ** (yani verileri itmekte olduğunuz bir repo), ve çoğu zaman, sizin * doğrudan yerel erişiminiz yok * . Ama eğer yaparsanız, bu kesinlikle "reset --soft" kullanımının iyi bir örneğidir (http://stackoverflow.com/questions/5203535/practical-uses-of-git-reset-soft'ta olduğu gibi) Cevabınıza +1. – VonC

25

bir çıplak repo aşağıdakileri kullanıyorsanız: Bir şeyi değiştirmek çalışmıyoruz beri çıplak repo --hard ve --mixed seçenekleri kullanarak adres

sonra Sorunlarla yok
git reset --soft <commit> 

çıplak repo sahip değildir (yani çalışan ağaç ve dizin).Senin durumunda özel olarak (çıplak repo) kullanmak isteyeyim:

git reset --soft HEAD^ 

switch branches on the remote repo için yapın:

git symbolic-ref HEAD refs/heads/<branch_name> 
+2

Taşımak istediğiniz dalı nasıl seçersiniz? Örneğiniz master üzerinde çalışıyor ancak 'git checkout other_branch 'çıplak olarak çalışmıyor. – Gauthier

+1

Hmmm ... Beni bunun üzerine oy verenleri merak ediyorum. Soru, uzak bir repoda şubelerin nasıl değiştirileceğini sormadı, çıplak bir repoda nasıl sıfırlanacağını sordu. Bir uzak repoda varsayılan dalı değiştirmek için, git sembolik ref HEAD refs/heads/ kullanın. – Hazok

2

Ayrıca git refspec gösterimi kullanmak ve böyle bir şey yapabilirsiniz:

Bu, hedef şubenin (ref tarafından belirtildiği gibi)tarafından belirtildiği gibi kaynak işlemine güncelleştirilmesini zorlar.parçası.

+2

dalı dışında bir acl olması dışında - ki genellikle “repo'nun kendisinde yapmak zorundaysanız” durum böyle… –

İlgili konular