2010-02-24 16 views
6

Kazara log/test.log kurdum ama hiç itmedim. Bundan kurtulmak için git rm yaptım. Ama itmeye çalıştığımda hala transfer edilmeye çalışan çok miktarda veri alıyorum. Git bu sorunu çözmemeli. Değilse, nasıl düzeltebilirim?git büyük dosya çıkardıktan sonra itme

cevap

11

Taahhüdü geri alma ve daha sonra itme, büyük dosya hala geçmişte taşınacak.

henüz onu itti değil ki ve o geçmişinizden taahhüt En son kaldırın yinelemek istiyorum taahhüt düşünüldüğünde: Bu durumuna Dizininizi dönecektir

$ git reset HEAD^

Ebeveyn taahhüdünde (HEAD^). Şimdi bir mulligan var: ilk defa kastettiğin yolu ekleyip ona kat.

Başka bir sonraki taahhütte bulunduktan sonra git rebase -i <commit>'a gerek duyarsınız; burada <commit>, kötü işlemenin ana şirketinin SHA-1 öğesidir.

Örneğin

(ve SHA-1 senin repo farklı olacaktır unutmayın)

$ git rebase -i 57d0b28

ile on line edit ile pick değiştirin

pick 366eca1 This has a huge file 
pick d975b30 delete foo 
pick 121802a delete bar 

# Rebase 57d0b28..121802a onto 57d0b28 
# 
# Commands: 
# p, pick = use commit 
# r, reword = use commit, but edit the commit message 
# e, edit = use commit, but stop for amending 
# s, squash = use commit, but meld into previous commit 
# 
# If you remove a line here THAT COMMIT WILL BE LOST. 
# However, if you remove everything, the rebase will be aborted. 
#

benzeyen bir editör size düşecek

Kaydet ve kapat Düzenleyicinizin

$ git rm --cached big-nasty-file 
rm 'big-nasty-file'

değiştirme (--cached sadece dizinden dosya kaldırır), form Oradan

Stopped at 366eca1... This has a huge file 
You can amend the commit now, with 

    git commit --amend 

Once you are satisfied with your changes, run 

    git rebase --continue

bir mesaj göreceksiniz kabuğundan, geri dönmek kusurlu dosyasını silmek

$ git commit --amend

taahhüt ve rebase

bitirmek 10
+0

SHA1 adreslerini işleriniz için nasıl alıyorsunuz? Örneğin, – Daniel

+0

@Daniel Run 'git log' veya' gitk'. –

2

İttirmediyseniz, hem add hem de rm öğelerini kaldırarak işlem geçmişinizi düzenlemek için git rebase -i kullanabilirsiniz. Bir uyarı, daha önce itilmiş olan tüm işleri düzenlememeye özen göstermeniz gerektiğidir.

http://blog.madism.org/index.php/2007/09/09/138-git-awsome-ness-git-rebase-interactive

Bu sefer aşağıdaki taahhüt ve diğer kaydedilmesini başka değişiklikler varsa yine bunu yapabilirsiniz olup olmadığını sordu. Değişir. Yalnızca en yakın zamanda değil, işlenmemiş taahhütleri düzenleyebilmeli/çıkarabilmelisiniz. Ancak, daha sonra değişiklikler silinen taahhütteki değişikliklere büyük ölçüde bağlıysa (örneğin, bir dosya ekledikten sonra daha sonra bir düzenlemede düzenlediyseniz) rebase başarısız olabilir. Bir işlemi silerseniz, bu işlemdeki tüm değişiklikleri kaybedersiniz. Bir taahhütten tek bir değişikliği kaldırmanın bir yolunu bilmiyorum. Test.rb dosyasındaki diğer değişiklikleri kaybetmek istemiyorsanız, işlemi silmeden önce bir yama ( git show <commitid> > /tmp/patch veya dahili git patch özellikleriyle) oluşturabilirsiniz. Daha sonra, büyük test.rb'yi kaldırmak için yama dosyanızı düzenleyin, ancak istediğiniz değişiklikleri bırakın ve yamayı başlığa yeniden uygulayın. Eğer Rebase başarısız nerede Daha önce de belirttiğimiz sorun var (ya da bunu başarısız olacağını düşünüyorum) ise

, sorunun tamamlamak sonra hepsini silin kaydedilmesini ait tüm için yamaları kaydedebilir ve bunları sırayla yeniden başladı.

+0

Henüz itmesem de, o zamandan beri pek çok işlem yaptım. Rebase hala bir seçenek mi? (Tesadüfi kütük/test.rb ile yapılan işlemin içinde bir ton dosya vardı) – Daniel