[git] 🚀 İşlemden önce 'git add' işlemini nasıl geri alabilirim?
Yanlışlıkla komutu kullanarak git'e dosya ekledim:
Henüz koşmadım git commit . Bunu geri almanın bir yolu var, bu yüzden bu dosyalar işleme dahil edilmeyecek mi?
Taahhütte git add bulunmadan önce geri alabilirsiniz
başka bir şeyi değiştirmeden, onu geçerli dizinden (“işlemek üzere” listesi) kaldırır.
tüm değişikliklerden kurtulmak için herhangi bir dosya adı olmadan. Makul bir sürede birer birer sıralanacak çok fazla dosya olduğunda bu kullanışlı olabilir.
Git'in eski sürümlerinde, yukarıdaki komutlar sırasıyla ve buna eşittir git reset HEAD <file> ve tanımsızsa (henüz deponuzda herhangi bir işlem yapmadığınız için) veya belirsiz ise ( aptalca bir şey olarak adlandırılan bir dal oluşturduğunuz için) git reset HEAD başarısız olur. yapmamalısın). Bu Git 1.8.2'de değiştirildi , bu nedenle Git'in modern versiyonlarında ilk komutunuzu vermeden önce bile yukarıdaki komutları kullanabilirsiniz: HEAD HEAD https://git.kernel.org/cgit/git/git.git/tree/Documentation/RelNotes/1.8.2.txt%23n179#n179
"git reset" (seçenekler veya parametreler olmadan) geçmişinizde herhangi bir taahhüt olmadığında hata vermek için kullanılır, ancak şimdi size boş bir indeks verir (var olmayan bir taahhütle eşleşmek için).
(ilk eklentimin tamamını geri almak için), yalnızca bu (çok) yararlı mesaj almak için:
Bunun sebebi, HEAD ref'in (şube?) İlk işlemden sonraya kadar var olmamasıdır. Yani, benim gibi aynı aceminin sorunuyla karşılaşacaksınız, iş akışınız da benimki gibi:
Git, yeni sıcaklık denemek için benim büyük yeni proje dizini cd
... bir sürü bok kaydırır ...
=> Kahretsin, hepsini eklemek istemedim.
google "git addo geri al"
=> Yığın Taşmasını Bul - yay
=> ölümcül: 'HEAD' öğesi geçerli bir ref olarak çözülemedi.
Ayrıca , posta listesinde bunun yararsızlığına karşı kaydedilmiş bir hata olduğu ortaya çıktı .
Ve doğru çözümün Git durum çıktısının tam ordaydı (ki, evet, 'saçma olarak' yazdım)
Ve çözüm gerçekten kullanmaktır git rm --cached FILE .
- Başka yerde burada uyarıları Not git rm ama, dosyanın yerel çalışma kopyası siler değil kullanırsanız --cached . İşte sonucu git help rm :
--cached Yolları yalnızca dizinden ayırmak ve kaldırmak için bu seçeneği kullanın. Çalışan ağaç dosyaları (değiştirilmiş olsun olmasın) bırakılacaktır.
Kullanmaya devam ediyorum
Her şeyi kaldırmak ve tekrar başlatmak için. Yine de işe yaramadı, çünkü add . özyinelemeli olsa da tekrarlama rm ihtiyacı ortaya çıktı -r . İç çekmek.
Tamam, şimdi başladığım yere döndüm. Bir dahaki sefere -n kuru koşmak için kullanacağım ve ne ekleneceğini göreceğim:
Hiçbir şeyi mahvetmeme git help rm konusunda güvenmeden önce her şeyi güvenli bir yere sıkıştırdım --cached (ya da yanlış yazdıysam).
git, nasıl sabitleneceğine dair talimatlar da dahil olmak üzere, sahnelenenleri vb.
Git, böyle durumlarda doğru şeyi yapmam için beni dürtmek konusunda oldukça iyi bir iş çıkarıyor.
Not: Son git sürümleri (1.8.4.x) bu mesajı değiştirdi:
Paul Beckingham2008-12-072008-12-07 23:22:56Z
Açıklığa kavuşturmak için: git add değişiklikleri geçerli çalışma dizininden hazırlama alanına (dizin) taşır .
Bu sürece evreleme denir . En doğal komut So sahne değişiklikleri (değişti dosyaları) belirgin olanıdır:
git add sadece takma ad yazmak için daha kolay git stage
Yazık orada hiçbir git unstage ne de git unadd komutları. İlgili olanı tahmin etmek veya hatırlamak zordur, ancak oldukça açıktır:
Sonunda yeni komutlarımız var:
Şahsen ben daha kısa takma adları kullanıyorum:
Kabul edilen cevaba ek olarak, yanlışlıkla eklenen dosyanız çok büyükse, muhtemelen ' git reset ' ile dizinden çıkardıktan sonra bile .git dizinde yer kapladığını göreceksiniz . Bu endişe edilecek bir şey değil, dosya gerçekten hala depoda, ancak sadece "gevşek bir nesne" olarak, diğer havuzlara (klonlama, basma yoluyla) kopyalanmayacak ve sonunda geri kazanılacak - belki de çok yakında değil. Endişeli iseniz, koşabilirsiniz:
Güncelleme (en çok oy alan cevaplardan kaynaklanabilecek bir karışıklığı giderme girişimidir):
Gerçek Yani, geri alma ait git add ?
Kesinlikle konuşuyorum ve yanılmıyorsam: hiçbiri .
git add geri alınamaz - genel olarak güvenli bir şekilde.
İlk önce git add <file> gerçekte ne yaptığını hatırlayalım :
Eğer <file> edilmiştir daha önce izlenmeyen , git add cache ekler bugünkü içeriğiyle.
Eğer <file> edildi zaten izlenir , git add güncel içerik kaydeder önbelleğe (enstantane, sürüm). GIT'de, bir dosyanın iki farklı sürümü (anlık görüntüler) iki farklı öğe olarak kabul edildiğinden , bu eylem hala add olarak adlandırılır (yalnızca güncellenmez ): bu nedenle, sonunda önbellek için yeni bir öğe ekliyoruz. sonra görevlendirilir.
OP'nin senaryosu ilk (izlenmemiş dosya) gibi görünüyor, izlenen öğelerden "geri al" ın (yalnızca geçerli içeriği değil) dosyayı kaldırmasını istiyoruz. Eğer durum böyle ise, o zaman çalıştırmak için Tamam git rm --cached <file> .
Ve ayrıca koşabiliriz git reset HEAD <file> . Bu genel olarak tercih edilir, çünkü her iki senaryoda da çalışır: zaten izlenen bir öğenin yanlış bir sürümünü eklediğimizde geri alma işlemini de yapar.
Birincisi: (cevabında belirtildiği gibi) git reset HEAD işe yaramayan sadece bir senaryo var , ama işe yarıyor git rm --cached : yeni bir depo (taahhüt yok). Ancak, gerçekten, bu pratik olarak alakasız bir durum.
İkincisi: git reset HEAD Önceden önbelleğe alınmış dosya içeriğini sihirli bir şekilde kurtaramayacağınızı unutmayın, yalnızca HEAD'den yeniden senkronize eder. Eğer yanlış yönlendirilmiş git add bir önceki aşamalı kararsız sürümün üzerine yazarsa, onu kurtaramayız. Bu yüzden, kesinlikle konuşursak, geri alamayız [*].
Elbette, sadece yeni dosyalar eklemek için 'git add' işleminin normal tembel iş akışını takip edersek, bu çok kritik değildir (vaka 1) ve yeni git commit -a komutları commit komutuyla güncelleriz .
* (Düzenleme: yukarıdakiler pratik olarak doğrudur, ancak yine de aşamalı fakat taahhüt edilmemiş ve üzerine yazılan değişiklikleri geri almak için hafifçe dolaştırılmış / kıvrımlı yollar olabilir - Johannes Matokic ve iolsmit'in yorumlarına bakın)
Zaten eklenmiş olan bir dosyayı geri almak için git kullanımı oldukça kolaydır , myfile.txt zaten eklenmiş olanları sıfırlamak için şunu kullanın:
İstenmeyen dosya (ları) düzenledikten sonra, geri almak için, yapabileceğiniz git reset , Head yerel olarak dosyanızın başı ve son parametre dosyanızın adıdır.
Aşağıdaki durumlarda, bu durumlarda olabilecek tüm adımlar da dahil olmak üzere, sizin için daha ayrıntılı olarak aşağıdaki adımları oluşturuyorum:
Geçerli dizinden eklediğiniz her şeyi tekrar tekrar "ekleyecektir"
ve tüm dosyaları el ile veya hepsini seçerek ve onaylama düğmesinden unstage düğmesine basarak kaldırın .
Khaja Minhajuddin2011-10-122011-10-12 01:12:51Z
Bir dosyayı değiştirip kullandınız git add . ya da git add <file> .
Dosyayı dizinden kaldırın, ancak çalışma kopyasında kaydedilmemiş değişikliklerle birlikte sürümlü ve solda tutun:
Dosyayı son durumuna HEAD'den sıfırlayın, değişiklikleri geri alın ve dizinden çıkartın:
Bu, git reset --hard HEAD tek dosyalarla çalışmadığı için gereklidir .
<file> Çalışma kopyasındaki değişiklikleri içeren sürümlendirilmemiş dosyayı saklayarak dizinden ve sürümden çıkartın :
<file> Çalışan kopyadan ve sürümlerden tamamen kaldırma :
Soru açıkça ifade edilmedi. Sebep bunun git add iki anlamı var:
hazırlama alanına yeni bir dosya ekleyerek , ardından geri al git rm --cached file .
hazırlama alanına değiştirilmiş bir dosya ekleyerek , ardından geri al git reset HEAD file .
Çünkü her iki durumda da beklenen şeyi yapıyor.
Uyarı: değiştirilmiş bir dosyada (daha önce depoda var git rm --cached file olan bir dosya) yaparsanız , dosya kaldırılır ! Halen dosya sisteminizde mevcut olacaktır, ancak herhangi biri sizin taahhüdünüzü yerine getirirse, dosya çalışma ağacından silinir. git commit
git status Dosyanın yeni bir dosya mı yoksa değiştirilmiş mi olduğunu size söyleyecektir :
İlk taahhüdün içindeyseniz ve kullanamıyorsanız git reset , sadece "Git iflasını" bildirin ve .git klasörü silin ve baştan başlayın
Ana Betts2009-11-192009-11-19 16:39:50Z
Diğer cevapların çoğuna göre kullanabilirsiniz git reset
Aslında için Git komutunu (iyi bir takma ad) ekler bu büyük küçük yazı bulundu git unadd : bakınız git unadd bilgi veya için ..
Yeni git add -i eklenen dosyaları yaklaşmakta olan taahhüdünüzden kaldırmak için kullanın . Örnek:
İstemediğiniz dosyayı eklemek:
Eklentinizi geri almak için etkileşimli eklentiye girme (git buraya yazılan komutlar "r" (geri döndürme), "1" (geri döndürme listesindeki ilk giriş gösterilir), geri döndürme modundan çıkmak için 'geri dön' ve "q" (çıkmak):
Bu kadar! İşte "foo" nun takip edilmeyen listesine geri döndüğünü gösteren kanıtınız:
Alex North-Keys2012-04-182012-04-18 12:53:38Z
git remove veya git rm bunun için --cached bayrakla birlikte kullanılabilir . Deneyin:
Yeni bir projeye başladığınızda, bu rahatsız edici sorunu önlemek için bir yol:
Yeni projeniz için ana dizini oluşturun.
.Gitignore dosyanızı tamamlayın.
Git, git reset herhangi bir taahhüdün yoksa yapmanı gerçekten zorlaştırıyor . Eğer oluşturursanız yapabilirsiniz bundan sonra küçük başlangıç, sadece bir tane sahip uğruna taahhüt git add -A ve git reset herşeyin hakkını almak için istediğiniz sıklıkta olarak.
Bu yöntemin bir başka avantajı, daha sonra satır sonu sıkıntılarıyla karşılaşırsanız ve tüm dosyalarınızı yenilemeniz gerekirse, kolay:
İlk taahhüdünüzü kontrol edin. Bu, tüm dosyalarınızı kaldıracak.
O zaman en son taahhüdünüzü tekrar kontrol edin. Bu, geçerli satır sonu ayarlarınızı kullanarak dosyalarınızın yeni kopyalarını alır.
Ryan Lundy2011-09-242011-09-24 23:34:39Z
Bir revizyon belirtemezseniz, bir ayırıcı dahil etmeniz gerektiğini unutmayın. Konsolumdan örnek:
Yeni dosyaları hazırlama alanından kaldırmak için (ve yalnızca yeni bir dosya olması durumunda), yukarıda belirtildiği gibi:
Sadece yanlışlıkla eklenen yeni dosyalar için rm --cached kullanın.
Belirli bir klasördeki (ve alt klasörlerindeki) her dosyayı sıfırlamak için aşağıdaki komutu kullanabilirsiniz:
* aynı anda birden fazla dosyayı işlemek için komutu kullanın.
Sadece git reset geri dönecek şekilde yazın ve git add . son işleminizden bu yana asla yazmamışsınız gibi . Daha önce taahhüt ettiğinizden emin olun.
Sanırım yeni bir dosya oluşturdum newFile.txt .
Diyelim ki dosyayı yanlışlıkla ekledim. git add newFile.txt
Şimdi taahhüt etmeden önce bu eklentiyi geri almak istiyorum. git reset newFile.txt
Vidura Mudalige2016-10-042016-10-04 11:02:48Z
Not: Google Checkout dosyalardaki kodu değiştirir ve en son güncellenmiş (taahhüt edilen) duruma geçer. sıfırlama kodları değiştirmez; sadece başlığı sıfırlar.
Hasib Kamal2017-10-282017-10-28 06:03:31Z
Bu komut değişikliklerinizi kaldıracaktır:
dosya eklemek için seçenek 3'ü seçin. Benim durumumda genellikle birden fazla dosya eklemek istiyorum, etkileşimli modda dosya eklemek için bu sayıları kullanabilirsiniz. Bu 4: 1,2,3,5 dışında hepsini alacak
Bir dizi seçmek için, 1'den 5'e kadar hepsini almak için sadece 1-5 yazın.
Git hazırlama dosyaları
Git eklemek geri almak için kullanımı
Anirudh Sood2016-10-022016-10-02 15:54:48Z
Dosya adı.txt adlı bir dosyayı geçerli dizinden, "işlem yapılacak" alanından başka bir şey değiştirmeden kaldıracak.
Rahul Sinha2016-07-112016-07-11 18:40:52Z
git add myfile.txt # bu, dosyanızı taahhüt altına alınmış bir listeye ekler
Bu komutun tam tersi,
öyleyse, önceki durumda olacaksın. belirtilen takip edilmemiş listede tekrar olacaktır (önceki durum).
kafanızı belirtilen dosya ile sıfırlar. bu nedenle, eğer kafanızda bulunmuyorsa, basitçe sıfırlayacaktır
Mohideen bin Mohammed2017-06-272017-06-27 13:58:34Z
SourceTree'de bunu kolayca gui üzerinden yapabilirsiniz. Sourcetree'nin bir dosyayı ayırmak için hangi komutu kullandığını kontrol edebilirsiniz.
Yeni bir dosya oluşturdum ve git'e ekledim. Sonra onu SourceTree gui kullanarak etiketledim. Sonuç bu:
Dosyaları serbest bırakma [08/12/15 10:43]
git -c diff.mnemonicprefix = false -c core.quotepath = false -c credential.helper = sourcetree reset -q - yol / / / dosya / dosyaadı.java
SourceTree, reset yeni dosyaları ayırmak için kullanır .
En sezgisel çözümlerden biri SourceTree kullanıyor .
Yalnızca aşamalı ve etiketlenmemiş dosyaları sürükleyip bırakabilirsiniz
Marcin Szymczak2017-05-262017-05-26 08:32:16Z
Git sıfırlama işlemi nasıl geri alınır?
Git tek bir komutla ekleyin ve kabul edin
Git'teki bir sonraki taahhüdü nasıl bulabilirim? (çocuk / ref çocukları)
“Git add <dir>” ifadesini geri al?
Git'te belirli bir işlemi bir daldan diğerine nasıl birleştirebilirim?
Git'teki hatalı bir işleme iletisini nasıl düzenlerim (ittiğim)?
.NET'te ondalık, değişken ve ikili arasındaki fark?
SQL tablosunda yinelenen değerleri bulma
İki dizin ağacı verildiğinde, hangi dosyaların farklı olduğunu nasıl öğrenebilirim?
Ondalık Sayıyı İkili Olarak Dönüştür
ISO 8601 Uyumlu Dize'yi java.util.Date'e Dönüştürme
ImageView genişliğini ve yüksekliğini programlı olarak ayarla