Taahhüt etmeden önce 'git add' nasıl iptal edilir?

Yanlışlıkla git komutuna git dosyaları ekledik:

 git add myfile.txt 

Ben henüz git commit . Bunu iptal etmenin bir yolu var, böylece bu dosyalar işleme dahil edilmez mi?


Şu anda 48 cevap var (bazıları silindi). Yeni bilginiz yoksa lütfen yenisini eklemeyin.

7856
08 дек. paxos1977 08 dec tarafından ayarlandı . 2008-12-08 00:57 '08, 0:57 2008-12-08 00:57
@ 34 cevap
  • 1
  • 2

git add ile taahhütte bulunmadan önce iptal edebilirsiniz.

 git reset <file> 

başka bir şeyi değiştirmeden, onu geçerli dizinden (“işlemek üzere” listesi) kaldıracaktır.

Kullanabilirsiniz

 git reset 

tüm değişiklikleri devre dışı bırakmak için herhangi bir dosya adı olmadan. Makul bir sürede çok fazla dosya tek tek listelendiğinde bu kullanışlı olabilir.

Git’in eski sürümlerinde, yukarıdaki komutlar sırasıyla git reset HEAD <file> ve git reset HEAD eşdeğerdir ve HEAD tanımsızsa (reponunuzda herhangi bir taahhütte bulunmadığınızdan) veya belirsizse (çünkü bir dal oluşturduysanız) başarılı olmaz yapmamanız gereken aptalca bir şey olan HEAD adını verin). Bu Git 1.8.2'de değiştirildi , ancak Git'in modern sürümlerinde ilk taahhüdünüzü oluşturmadan önce yukarıdaki komutları kullanabilirsiniz:

Sizin için kullanılan "git reset" (parametreler veya parametreler olmadan) geçmişinizde herhangi bir taahhüdünüz yoktur, ancak şimdi size boş bir indeks verir (mevcut olmayan bir taahhüde uyması için bile dahil edilmez).

8850
08 дек. cevap 08 Aralık genhack verilir . 2008-12-08 01:30 '08, 1:30 2008-12-08 01:30

İstediğiniz:

 git rm --cached <added_file_to_undo> 

Gerekçe:

Bu konuda yeniyken ilk denedim

 git reset . 

(tüm ilk yüklemelerimi iptal etmek için), yalnızca bu (çok değil) faydalı mesajı almak için:

 fatal: Failed to resolve 'HEAD' as a valid ref. 

Bunun, HEAD (şube?) Bağlantısının yalnızca ilk işlemden sonra var olmasından kaynaklandığı ortaya çıktı. Başka bir deyişle, benim gibi aynı acemilerle karşılaşacaksınız, eğer benimki gibi iş akışınız şöyle görünecekse:

  1. Gitmeyi denemek için yeni proje dizinime gidin, yeni isteklilik
  2. git init
  3. git add.
  4. git status

    ... bir sürü saçma kaydırma ...

    > Kahretsin, hepsini eklemek istemedim.

  5. google "iptal git ekle"

    => yığın taşmasını bul - ooh

  6. git reset.

    => ölümcül: 'HEAD' geçerli bir bağlantı olarak çözülemedi.

Ek olarak, dağıtım listesine bir hata mesajının kaydedildiği anlaşılmaktadır.

Ve doğru karar tam da Git durum çıktısında (ki “evet” diye adlandırdım) oldu.

border=0
 ... # Changes to be committed: # (use "git rm --cached <file>..." to unstage) ... 

Ve çözüm gerçekten git rm --cached FILE kullanmaktır.

Burada başka bir yerde bulunan uyarılara dikkat edin - git rm dosyanın yerel çalışma kopyanızı siler ancak --cached kullanıyorsanız kullanmaz. git help rm sonucudur:

--cached Yolları yalnızca dizinden kaldırmak ve kaldırmak için bu seçeneği kullanın. Değiştirilmiş veya değiştirilmemiş masaüstü dosyaları kalır.

Kullanmaya başladım

 git rm --cached . 

her şeyi silin ve baştan başlayın. İşe yaramadı, çünkü yine de add. özyinelemeli, rm ihtiyacı -r için. Kederlen.

 git rm -r --cached . 

Tamam, şimdi başladığım yere döndüm. Bir dahaki sefere -n çalıştırmak için -n kullanacağım ve ne ekleneceğini göreceğim:

 git add -n . 

--cached güvenmeden önce herşeyi güvenli bir yerde arşivledim - --cached hiçbir şey yok etmedi (ya da yanlış yazdıysam).

2013
25 марта '09 в 19:20 2009-03-25 19:20 Cevap, Ravent’in 25 Mart’ta 19:20, 19:20

Eğer yazarsanız:

 git status 

git, bağlantıyı kesmenin nasıl yapılacağına ilişkin talimatlar da dahil olmak üzere neyin oturduğunu vs.

 use "git reset HEAD <file>..." to unstage 

Git, bu durumlarda beni doğru olanı yapmaya zorlayan iyi bir iş çıkarıyor.

Not. Git'in son sürümleri (1.8.4.x) bu mesajı değiştirdi:

 (use "git rm --cached <file>..." to unstage) 
498
08 дек. Cevap Paul Beckingham 08 Aralık tarafından verildi . 2008-12-08 02:22 '08, 02:22, 2008-12-08 02:22

git add kavuşturmak için: git add , geçerli çalışma dizininden bir ara alana (indeks) değişiklikler taşır.

Bu sürece ara denir. Bu nedenle, değişikliklerin değiştirilmesi için en doğal komut (değiştirilmiş dosyalar) açıktır:

 git stage 

git add sadece git stage için bir takma git stage

git unstage ve git unadd olmaması üzücü. Karşılık gelen soruyu tahmin etmek ya da hatırlamak zordur, ancak oldukça açıktır:

 git reset HEAD -- 

Bunun için kolayca bir takma ad oluşturabiliriz:

 git config --global alias.unadd 'reset HEAD --' git config --global alias.unstage 'reset HEAD --' 

Sonunda yeni takımlarımız var:

 git add file1 git stage file2 git unadd file2 git unstage file1 

Şahsen ben daha da kısa takma adlar kullanıyorum:

 git a #for staging git u #for unstaging 
232
10 сент. Cevap 10 Eylül sürüyor. 2010-09-10 23:28 '10 23:28 2010-09-10 23:28

Kabul edilen cevaba ek olarak, yanlışlıkla eklenen dosyanız çok büyükse, muhtemelen " git reset " kullanarak dizinden çıkardıktan sonra bile hala .git dizininde yer aldığını .git . Endişelenmemelisiniz, dosya gerçekten hala havuzdadır, ancak yalnızca “özgür nesne” olarak, diğer havuzlara (klonlama, basma yoluyla) kopyalanmayacaktır ve alan sonunda serbest bırakılacaktır - belki de çok yakında olmasa da . Endişeleniyorsanız kaçabilirsiniz:

 git gc --prune=now 

Güncelleme (bundan sonra en yüksek oyu alan cevaplardan doğabilecek karışıklıkları gidermeye çalışacağım):

Peki git add asıl iptali nedir?

git reset HEAD <file> ?

veya

git rm --cached <file> ?

Kesinlikle konuşuyorum ve yanılmıyorsam: hayır .

git add , genel olarak güvenli bir şekilde geri alınamaz .

İlk önce git add <file> öğesinin gerçekte ne yaptığını hatırlayalım:

  1. <file> daha önce izlenmediyse , git add , mevcut içerikleri ile önbelleğe ekler .

  2. <file> zaten izlenmişse , git add , mevcut içeriği (anlık görüntü, sürüm) önbelleğe kaydeder . GIT'de, bir dosyanın iki farklı sürümü (anlık görüntüler) iki farklı öğe olarak değerlendirildiğinden, bu eyleme hala ekleme (ve yalnızca güncelleme değil) denir: bu nedenle, daha sonra yapılacak şekilde önbelleğe yeni bir öğe ekleriz.

Bunun ışığında, soru biraz belirsizdir:

Yanlışlıkla bu komutu kullanarak dosya ekledim ...

OP betiği ilk (izlenmemiş dosya) görünüyor, izlenen öğelerden dosyayı (yalnızca geçerli içeriği değil) silmek için "geri al" istiyoruz. Eğer öyleyse, git rm --cached <file> çalıştırabilirsiniz.

Ayrıca git reset HEAD <file> çalıştırabiliriz. Genel olarak, bu her iki senaryoda da çalıştığı için tercih edilir: önceden izlenen bir öğenin yanlışlıkla bir versiyonunu eklediğimizde eylemleri de iptal eder.

Fakat iki uyarı var.

Birincisi: (cevapta belirtildiği gibi) git reset HEAD git rm --cached çalışmadığı yalnızca bir komut dosyası var, ancak git rm --cached çalışıyor: yeni bir depo (taahhütler olmadan). Ancak, aslında, bu pratik olarak alakasız.

İkincisi, git reset HEAD önceden önbelleğe alınmış dosya içeriğini sihirli bir şekilde geri yükleyemediğini, yalnızca HEAD ile yeniden senkronize ettiğini unutmayın. Eğer hatalı git add komutumuz önceki onaylanmamış sürümün üzerine yazmışsa, onu geri yükleyemeyiz. Bu nedenle, kesinlikle konuşursak, [*] iptal edemeyiz.

örnek:

 $ git init $ echo "version 1" > file.txt $ git add file.txt # first add of file.txt $ git commit -m 'first commit' $ echo "version 2" > file.txt $ git add file.txt # stage (don't commit) "version 2" of file.txt $ git diff --cached file.txt -version 1 +version 2 $ echo "version 3" > file.txt $ git diff file.txt -version 2 +version 3 $ git add file.txt # oops we didn't mean this $ git reset HEAD file.txt # undo ? $ git diff --cached file.txt # no dif, of course. stage == HEAD $ git diff file.txt # we have lost irrevocably "version 2" -version 1 +version 3 

Tabii ki, sadece yeni dosyalar eklemek için 'git add' komutunu çalıştırmanın normal tembel iş akışını takip edersek bu çok önemli değildir (vaka 1) ve yeni içeriği commit, git commit -a komutuyla güncelleriz.


* (Düzenleme: Yukarıdakiler neredeyse doğrudur, ancak yine de yapılan, ancak düzeltilmeyen ve üzerine yazılan değişikliklerin kurtarılması için bazı korsan / karışık yollar olabilir - Johannes Matokich ve iolsmit tarafından yapılan açıklamalara bakınız)

153
18 мая '11 в 21:05 2011-05-18 21:05 Cevap Leonbloy tarafından 18 Mayıs '11 de 21:05 2011-05-18 21:05 tarihinde verilmiştir.
 git rm --cached . -r 

Geçerli dizinden eklediğiniz her şeyi tekrar tekrar "ekleyemez"

89
10 дек. Cevap braitsch tarafından gönderildi 10 dec. 2009-12-10 00:19 0: 19'da 2009-012-10 00:19

koşmak

 git gui 

ve tüm dosyaları manuel olarak veya hepsini seçerek ve onayla onay düğmesine basarak silin.

83
12 окт. Cevap 12 Ekim tarihinde Hacı Minhajuddin tarafından verildi. 2011-10-12 04:12 11, 2011: 10-12 , 04:12

Git, akla gelebilecek her eylem için komutlara sahiptir, ancak işleri düzeltmek için kapsamlı bilgiye ihtiyaç duyar ve bu nedenle en iyi ihtimalle karşı sezgiseldir ...

Daha önce ne yaptın:

  • Dosyayı değiştirip git add . kullanın git add . veya git add <file> .

Ne istiyorsun

  • Dosyayı dizinden kaldırın, ancak sürümlerinde kaydedin ve çalışma kopyasındaki düzeltilmemiş değişikliklerle bırakın:

     git reset head <file> 
  • Değişiklikleri atarak ve dizinden silerek dosyayı en son durumuyla HEAD'den sıfırlayın:

29 марта '13 в 14:14 2013-03-29 14:14 Cevap 29 Mart, 13’te sjas’a 14:14 2013-03-29 14:14

Önceden eklenmiş bir dosyayı iptal etmek için , git kullanarak, önceden eklenmiş olan myfile.txt dosyasını sıfırlamak için şunu kullanın:

 git reset HEAD myfile.txt 

açıklamak

Gereksiz dosyaları iptal etmek için iptal ettikten sonra git reset , Head git reset yerel ağda dosyanızı git reset ve son parametre dosyanızın adıdır.

Aşağıdaki durumlarda, aşağıdaki durumlarda ortaya çıkabilecek tüm adımlar dahil olmak üzere, sizin için daha ayrıntılı olarak gösterilen adımları oluşturuyorum:

2019

28 июня '17 в 13:43 2017-06-28 13:43 Cevap, Alireza tarafından 28 Haziran 17 : 17'de, 17:43 2017-06-28 13:43

Soru açıkça sorulmuyor. Bunun nedeni git add iki anlamı vardır:

  • hazırlama alanına yeni bir dosya ekledikten sonra git rm --cached file ile iptal edin.
  • Bir hazırlama alanına değiştirilmiş bir dosya eklemek, sonra git reset HEAD file ile iptal etmek.

şüpheniz varsa kullanın

 git reset HEAD file 

Çünkü her iki durumda da beklenen şey bekleniyor.

Uyarı: git rm --cached file değiştirilirse (önceden depoda bulunan dosya) dosya değiştirilirse, git commit ! Hala dosya sisteminizde mevcut olacaktır, ancak başka biri sizin taahhüdünüzü yerine getirirse, dosya çalışma ağacından kaldırılır.

git status , dosyanın yeni mi yoksa değiştirilmiş mi olduğunu gösterir :

 On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage) new file: my_new_file.txt modified: my_modified_file.txt 
69
16 янв. Cevap 16 Ocak Michael_Scharf tarafından verildi. 2014-01-16 22:54 '14, 10:54 pm 2014-01-16 22:54

Orijinal taahhüdünüzü kullanıyorsanız ve git reset kullanamıyorsanız, "Git iflasını" bildirin ve .git klasörünü silin ve onunla başlayın

58
19 нояб. Paul Betts 19 Kasım tarafından verilen cevap 2009-11-19 19:39 '09, 19:39 2009-11-19 19:39

Diğer birçok git reset kullanabilirsiniz.

ANCAK:

Git unadd için aslında bir git unadd komutu (iyi, takma ad) ekleyen bu harika mesajı git unadd :

sadece

 git config --global alias.unadd "reset HEAD" 

Şimdi yapabilirsin

 git unadd foo.txt bar.txt 
54
01 окт. Cevap, 01 ekim elektrolit tarafından verilmiştir . 2010-10-01 17:54 '10, 17:54 2010-10-01 17:54

git remove veya git rm , --cached bayrağı ile bunun için kullanılabilir. deneyin:

 git help rm 
45
08 дек. Cevap 08 Aralık'ta Gnud tarafından verildi . 2008-12-08 01:00 '08, 1:00 2008-12-08 01:00

Yeni eklenen dosyaları yaklaşmakta olan hesabınızdan kaldırmak için git add -i kullanın. örnek:

İhtiyacınız olmayan bir dosya eklemek:

 $ git add foo $ git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # new file: foo # # Untracked files: # (use "git add <file>..." to include in what will be committed) # [...]# 

Eklemenizi iptal etmek için etkileşimli eklemeyi etkinleştirin (buraya buraya yazılan komutlar: "r" (dönüş), "1" (listedeki ilk giriş dönecektir), dönüş modundan çıkmak için "dönüş" ve "q" (çıkın):

 $ git add -i staged unstaged path 1: +1/-0 nothing foo *** Commands *** 1: [s]tatus 2: [u]pdate 3: [r]evert 4: [a]dd untracked 5: [p]atch 6: [d]iff 7: [q]uit 8: [h]elp What now> r staged unstaged path 1: +1/-0 nothing [f]oo Revert>> 1 staged unstaged path * 1: +1/-0 nothing [f]oo Revert>> note: foo is untracked now. reverted one path *** Commands *** 1: [s]tatus 2: [u]pdate 3: [r]evert 4: [a]dd untracked 5: [p]atch 6: [d]iff 7: [q]uit 8: [h]elp What now> q Bye. $ 

Bu nedir! İşte "foo" nun bir iz bırakmadan listeye döndüğünü gösteren kanıtınız:

 $ git status # On branch master # Untracked files: # (use "git add <file>..." to include in what will be committed) # [...] # foo nothing added to commit but untracked files present (use "git add" to track) $ 
41
18 апр. Yanıtlayan: Alex North-Keys 18 Nis 2012-04-18 15:53 '12, 15:53, 2012-04-18 15:53

Yeni bir proje başlatırken bu tatsız problemi önleyebilirsiniz:

  • Yeni projeniz için bir temel dizin oluşturun.
  • git init çalıştırın.
  • Şimdi bir .gitignore dosyası oluşturun (boş olsa bile).
  • .Gitignore dosyasını düzeltin.

Taahhütleriniz yoksa git reset işlemini çok zorlaştırır. Sadece bunun uğruna küçük bir ilke yaratırsanız, git add -A ve git reset her şeyin doğru olmasını istediğiniz kadar yapabilirsiniz.

Bu yöntemin bir başka avantajı, daha sonra hat tamamlama problemleriyle karşılaşırsanız ve tüm dosyalarınızı güncellemeniz gerekirse, kolay:

  • İlk düzeltmenin olduğunu unutmayın. Bu, tüm dosyalarınızı siler.
  • O zaman son işini tekrar kontrol et. Bu, geçerli satır sonu ayarlarını kullanarak dosyalarınızın yeni kopyalarını geri yükleyecektir.
36
25 сент. Cevap Ryan Lundy tarafından verildi 25 eylül. 2011-09-25 02:34 11, 2011-09-25 02:34

Belki de sorunuzu yayınladığınızdan beri Git gelişti.

 $> git --version git version 1.6.2.1 

Şimdi deneyebilirsiniz:

 git reset HEAD . 

Aradığın şey bu olmalı.

32
19 нояб. Cevap Kokotte 23 Kasım 19 tarafından verilmiştir . 2009-11-19 19:38 '09, 19:38 2009-11-19 19:38

Bir revizyon belirtmediyseniz, bir ayırıcı dahil etmeniz gerektiğini unutmayın. Konsolumdan bir örnek:

 git reset <path_to_file> fatal: ambiguous argument '<path_to_file>': unknown revision or path not in the working tree. Use '--' to separate paths from revisions git reset -- <path_to_file> Unstaged changes after reset: M <path_to_file> 

(git sürüm 1.7.5.4)

32
23 янв. Cevap 23 Ocak'ta powlo verildi . 2012-01-23 19:57 '12, 19:57 2012-01-23 19:57

Yeni dosyaları hazırlama alanından (ve yalnızca yeni bir dosya olması durumunda) yukarıda önerildiği gibi kaldırmak için:

 git rm --cached FILE 

Rm --cached komutunu yalnızca yanlışlıkla eklenen yeni dosyalar için kullanın.

29
22 июня '09 в 14:58 2009-06-22 14:58 Cevap 22 Haziran 099 'da Ran ' a 14:58 'de verildi 2009-06-22 14:58

Belirli bir klasördeki (ve alt klasörlerindeki) her dosyayı sıfırladığınızda, aşağıdaki komutu kullanabilirsiniz:

 git reset * 
23
26 июля '12 в 10:50 2012-07-26 10:50 Cevap Zorayr'a 26 Temmuz 12'de 10: 50'de verildi 2012-07-26 10:50

Aynı anda birden fazla dosyayı işlemek için * komutunu kullanın

 git reset HEAD *.prj git reset HEAD *.bmp git reset HEAD *gdb* 

ve benzeri

23
28 авг. boulder_ruby Cevap 28 Ağustos. 2013-08-28 00:15 '13, 0:15 2013-08-28 00:15

Sadece git reset , geri dönecek ve git add . hiç girmemiş gibi görünüyorsunuz git add . son görevden beri. Bunu daha önce yaptığınızdan emin olun.

21
19 мая '10 в 6:49 2010-05-19 06:49 Cevap 19 Mayıs 1910'da Donovan tarafından 06:49 2010-05-19 06:49 tarihinde verilmiştir.

Yeni bir dosya newFile.txt oluşturduğumu varsayalım.

2019

04 окт. Cevap Vidura Mudalige 04 ekim tarafından verildi . 2016-10-04 14:02 '16, 14:02, 2016-10-04 14:02

Belirli bir dosya için:

  • git sıfırla my_file.txt
  • git ödeme my_file.txt

Tüm eklenen dosyalar için:

  • git reset
  • Git ödeme.

Not: ödeme , dosyalardaki kodu değiştirir ve en son güncellenen (onaylanan) duruma gider. sıfırlama kodları değiştirmez; sadece manşeti düşürdü.

15
28 окт. Cevap 28 Ekim'de Hasib Kamal tarafından verildi . 2017-10-28 09:03 '17, 09:03 2017-10-28 09:03

Bu komut değişikliklerinizi değiştirir:

 git reset HEAD filename.txt 

Ayrıca kullanabilirsiniz

 git add -p 

dosyaların parçalarını eklemek için.

12
31 янв. Cevap wallerjake verilir 31 Ocak 2013-01-31 18:43 '13 18:43 2013-01-31 18:43

Kimsenin etkileşimli moddan bahsetmemesine şaşırdım:

 git add -i 

Dosya eklemek için 3 seçeneğini belirleyin. Benim durumumda, genellikle birkaç dosya eklemek istiyorum; çevrimiçi olarak, bu numaraları dosya eklemek için kullanabilirsiniz. Sadece 4: 1,2,3,5

Bir dizi seçmek için, 1'den 5'e kadar olan her şeyi almak için 1-5 girin.

Git ara dosyaları

12
22 окт. Jonathan'ın 22 Ekimine cevap verin . 2015-10-22 16:03 '15 16:03 2015-10-22, 16:03

Git eklemek kullanımı iptal etmek

git reset filename

12
02 окт. Cevap Anirudh Sood 02 ekim. 2016-10-02 18:54 '16, 18:54 2016-10-02 18:54

git add myfile.txt # bu, dosyanızı taahhüt listesine ekleyecektir.

Bu komutun aksine,

 git reset HEAD myfile.txt # this will undo it. 

Yani, önceki durumda olacaksın. Belirtilenler, iz bırakmadan tekrar listede olacaktır (önceki durum).

Başını belirtilen dosyayla sıfırlar. Yani eğer kafanızda bu yoksa, sadece sıfırlamanız yeterlidir.

8
27 июня '17 в 16:58 2017-06-27 16:58 Cevap Mohideen ibn Mohammed tarafından 27 Haziran 17 'da 16:58 2017-06-27 16:58 tarihinde verilmiştir.
 git reset filename.txt 

Filename.txt adlı dosyayı geçerli dizinden, "yaklaşık olmak üzere" alanından, hiçbir şey değiştirmeden kaldırır.

8
11 июля '16 в 21:40 2016-07-11 21:40 Cevap 11 Temmuz 'de Rahul Sinha tarafından 21: 40'da verilecek 2016-07-11 21:40

SourceTree'de bunu gui ile kolayca yapabilirsiniz. Sourcetree'nin hangi komutu kullandığını kontrol etmek için dosyayı kontrol edebilirsiniz.

Yeni bir dosya oluşturdum ve git'e ekledim. Sonra SourceTree guit kullanarak kapattım. Sonuç budur:

Sabitlenmemiş dosyalar [08/12/15 10:43]
Git -c diff. mnemonicprefix = false -c çekirdeği. quotepath = false -c kimlik bilgileri. yardımcı = sourcetree reset -q - yol / / / dosya / dosyaadı.java

SourceTree, yeni dosyaları devre dışı bırakmak için reset kullanır.

7
08 дек. Cevap miva2 08 dec tarafından verilmektedir . 2015-12-08 12:58 '15 12:58, 2015-12-08 12:58
 git reset filename.txt 

Filename.txt adlı dosyayı geçerli dizinden, "yaklaşık olmak üzere" alanından, hiçbir şey değiştirmeden kaldırır.

6
26 окт. Cevap 26 Ekim tarihinde Joseph Mathew tarafından verildi 2017-10-26 21:15 '17 21:15 2017-10-26 21:15
  • 1
  • 2

etiketleri ile ilgili diğer bilgiler