Git onayından dosyaları kaldır

Git kullanıyorum ve bazı dosyalar kullandım.

 git commit -a 

Daha sonra dosyanın yanlışlıkla işleme dahil edildiğini keşfettim.

Son işlemden bir dosyayı silmek nasıl?

849
18 сент. Mojoy 18 Eylül'de ayarlandı . 2012-09-18 19:59 '12, 19:59, 2012-09-18 19:59
@ 19 cevaplar

Buradaki diğer cevapların yanlış olduğunu düşünüyorum, çünkü yapılan değişikliklerin geri alınmadan hatalı bir şekilde sabitlenmiş dosyaları önceki fiksasyondan tekrar ara alana geri götürmekle ilgili olduğunu düşünüyorum. Bu Paritosh Singh tarafından önerildiği gibi yapılabilir:

 git reset --soft HEAD^ 

veya

 git reset --soft HEAD~1 

Sonra önemsiz dosyaları, kullanım dışı bırakmak için sıfırlayın:

 git reset HEAD path/to/unwanted_file 

Şimdi tekrar deneyin, aynı taahhüt mesajını tekrar kullanabilirsiniz:

 git commit -c ORIG_HEAD 
1673
10 марта '13 в 13:56 2013-03-10 13:56 Cevap 10 Mart 13'te 13.05'de 13.05.2013 13:56

Dikkat ! Bir dosyayı önceki işleminizden silmek ve diske kaydetmek istiyorsanız, juzzlin cevabını biraz daha yüksek okuyun.

Bu sizin son işiniz ise ve dosyayı yerel ve uzak havuzunuzdan tamamen kaldırmak istiyorsanız, şunları yapabilirsiniz:

  • git rm <file> dosyasını sil git rm <file>
  • değişim bayrağıyla git commit --amend : git commit --amend
border=0

Düzeltme bayrağı tekrar gitmesini, ancak "birleştirmesini" (iki dalı birleştirme anlamında değil) son düzeltmeyle düzeltmesini söyler.

Ve senin gibi söylemek gerekirse, git rm komutu rm'nin yaptığı şeyi yapar!

168
18 сент. Cevap. CharlesB 18 Eylül. 2012-09-18 20:22 '12, 20:22, 2012-09-18 20:22

Mevcut yanıtlar, istenmeyen dosyaların en sondan kaldırılmasını önermektedir.

Gereksiz dosyaları eski işlemden silmek istiyorsanız (basılsa bile) ve işlem nedeniyle gerekli olmayan yeni bir işlem oluşturmak istemiyorsanız:

1.

Dosyanın eşleşmesini istediğiniz taahhüdü bulun.

 git checkout <commit_id> <path_to_file> 

Çok sayıda dosyayı silmek istiyorsanız bunu birkaç kez yapabilirsiniz.

2.

 git commit -am "remove unwanted files" 

3.

Dosyaların hatalı bir şekilde eklendiğini vaad eden taahhüdün bulun, "35c23c2" deyin

 git rebase 35c23c2~1 -i // notice: "~1" is necessary 

Bu komut ayarlarınıza göre editörü açar. Varsayılan değer vim'dir.

"Gereksiz dosyaları sil" olması gereken son işlemi, yanlış işlemin bir sonraki satırına (bizim durumumuzda "35c23c2") taşıyın ve komutu fixup olarak ayarlayın:

 pick 35c23c2 the first commit fixup 0d78b28 remove unwanted files 

Dosyayı kaydettikten sonra iyi olmalısın.

Bitirmek için:

 git push -f 

Maalesef çakışma olursa, bunları manuel olarak çözmelisiniz.

75
27 янв. Tarafından cevap Brian Ocak 27 2015-01-27 18:24 '15 18:24 2015-01-27 18:24

Rm ile bir dosyayı silmek onu silecektir!

Gitmek yerine her zaman git'e bir taahhüt eklersiniz, bu durumda dosyayı ilk işlemden önceki durumuna geri döndürürsünüz (bu, dosya yeniyse bu "rm" silme eylemi olabilir) ve sonra yeniden kabul edersiniz .

Bir dosyayı önceki durumuna döndürmek için:

  git checkout <commit_id> <path_to_file> 

veya uzaktan kumandadaki başlığın durumuna geri getirin:

  git checkout origin/master <path_to_file> 

sonra taahhüdü değiştirin ve dosyanın listeden kaybolduğunu görmelisiniz (ve diskinizden silinmedi!)

30
28 янв. Bob Flannigon 28 Ocak tarihinde cevap verdi 2013-01-28 17:00 '13 17:00 2013-01-28 17:00

Sunucudaki değişiklikleri tıklamadıysanız, kullanabilirsiniz

 git reset --soft HEAD~1 

Tüm değişiklikleri sıfırlar ve bir işleme geri döner.

Değişikliklerinizi tıkladıysanız, @CharlesB'de belirtilen adımları izleyin

28
18 сент. Cevap Paritosh Singh 18 Eylül tarafından verildi . 2012-09-18 21:28 '12 21:28 2012-09-18 21:28
 git checkout HEAD~ path/to/file git commit --amend 
27
23 авг. Tarafından verilen cevap Ağustos 23 tarihinde Denis Shchepetov tarafından 2013-08-23 22:01 '13, 10:01 pm 2013-08-23 22:01

Kabul edilen cevabın gösterdiği gibi, bunu tüm taahhüdü bırakarak yapabilirsiniz. Ancak bu oldukça zor bir yaklaşımdır.
Bunu yapmanın daha temiz bir yolu, taahhüdünüzü saklamak ve değiştirilen dosyaları ondan kaldırmaktır.

 git reset HEAD^ -- path/to/file git commit --amend --no-edit 

git reset , dosyayı önceki işleyişiyle aynı şekilde alır ve dizinde oluşturur. Çalışma dizinindeki dosyaya dokunulmaz.
Ardından git commit düzeltir ve endeksi mevcut taahhüdün içine sıkar.

Esasen, önceki taahhütte bulunan dosyanın versiyonunu kabul eder ve mevcut taahhüte ekler. Bu, ağı değiştirmez, bu nedenle dosya işlemden etkin bir şekilde kaldırılır.

25
25 февр. 25 Şubat tarihinde Patrick tarafından verilen cevap 2017-02-25 03:06 '17, 3:06 2017-02-25 03:06

Aşağıdakiler, yalnızca OP'nin gerektirdiği amaçlanan dosyayı devre dışı bırakacaktır.

 git reset HEAD^ /path/to/file 

Aşağıdaki gibi bir şey göreceksiniz ...

Yapmanız gereken değişiklikler: (kaldırmak için "git reset HEAD ..." kullanın)

değiştirilmiş: / path / to / file

Taahhütlerde değişiklik yapılmamıştır: (yapılacakları güncellemek için "git add ..." kullanın) (çalışma dizinindeki değişiklikleri silmek için "git check -..." kullanın)

değiştirilmiş: / path / to / file

  • "Yapmanız gereken değişiklikler", taahhüt vermeden önce dosyanın önceki bir sürümüdür. Dosya hiç mevcut değilse, silinme gibi görünecektir. Bu değişikliği yaparsanız, değişikliği şubenizdeki dosyaya döndürecek bir revizyon görünecektir.
  • "Değişiklikler, taahhüt için teslim edilmedi", yaptığınız değişiklik ve dosyanın geçerli durumu

Bu noktada, dosyada istediğinizi yapabilirsiniz, örneğin başka bir sürüme sıfırlayabilirsiniz.

Taahhüt etmeye hazır olduğunuzda:

 git commit --amend -a 

veya (başka değişiklikler yapmak istemezseniz)

 git commit add /path/to/file git commit --amend 
24
07 дек. Cevap şu ThatsAMorais 07 dec verilir . 2014-12-07 10:13 '14, 10:13 2014-12-07 10:13

Eğer taahhüdü kaydetmek istiyorsanız (belki de taahhütle ilgili ayrıntılı bir mesaj oluşturmak için zaten zaman harcadınız ve bunu kaybetmek istemiyorsanız) ve dosyayı yalnızca taahhütten silmek, ancak depodan tamamen silmek istemiyorsanız

 git checkout origin/<remote-branch> <filename> git commit --amend 
8
17 июня '13 в 23:07 2013-06-17 23:07 Cevap mattexx tarafından 17 Haziran 13 'te 23:07 2013-06-17 23:07
 git rm --cached <file_to_remove_from_commit_<commit_id>_which_added_file> git commit -m "removed unwanted file from git" 

yerel bir dosya bırakacağım. Dosyanın yerel olmasını da istemiyorsanız, --cached seçeneğini atlayabilirsiniz.

Eğer tüm işler yerel şubenizdeyse, dosyayı daha sonraki bir taahhütte kaydetmeniz gerekir ve temiz bir geçmişe sahipmiş gibi, bunu yapmanın daha kolay bir yolu olabilir:

 git rm --cached <file_to_remove_from_commit_<commit_id>_which_added_file> git commit --squash <commit_id> git add <file_to_remove_from_commit_<commit_id>_which_added_file> git commit -m "brand new file!" git rebase --interactive <commit_id>^ 

ve daha karmaşık komutları ezberlemek veya bir mesajı düzeltmek veya aynı numarayı girmek zorunda kalmadan yeniden başlatmayı kolayca bitirebilirsiniz.

6
23 февр. Cevap, 23 Şubat'ta Bryan Buckley tarafından verildi . 2016-02-23 09:22 '16, 09:22, 2016-02-23 09:22

Git GUI kullanımı, bir dosyayı önceki bir işlemden silmeyi kolaylaştırabilir.

Bunun paylaşılan bir şube olmadığını ve öykünün yeniden yazılmasının sakıncası olmadığını farz edersek:

 git gui citool --amend 

Yanlışlıkla düzeltilen dosyayı iptal edebilir ve sonra "Gönder" i tıklayabilirsiniz.

2019

6
18 мая '15 в 22:50 2015-05-18 22:50 Cevap JDiMatteo tarafından 18 Mayıs, 15: 10: 50'de verildi 2015-05-18 22:50

Aşağıdaki komutların bir sırasını çalıştırın:

 //to remove the last commit, but preserve changes git reset --soft HEAD~1 //to remove unneded file from the staging area git reset HEAD `<your file>` //finally make a new commit git commit -m 'Your message' 
5
10 сент. Cevap Sergey Onishchenko tarafından 10 eylül . 2015-09-10 14:51 '15, 14:51 2015-09-10 14:51

Size bir örnek anlatacağım: A, B, C ardışık 3 sabitleme olsun. B Kararı, taahhüt edilmemiş olması gereken bir dosya içeriyor.

  • $ git log # take Bir commmit_id
  • $ git rebase -i "A_ID"
  • vim rebase’deki değişiklik 'e' ye bağlı
  • $ git rm unwanted_file
  • $ git rebase devam ediyor
  • $ git itme
3
17 авг. Cevap Moaz Rashad 17 Ağustos tarafından verildi. 2017-08-17 12:52 '17, 12:52 2017-08-17 12:52

Sadece en üst cevabı eklemek istedim, çünkü ek bir komut uygulamak zorunda kaldım:

 git reset --soft HEAD^ git checkout origin/master <filepath> 

Yaşasın!

3
25 мая '16 в 18:24 2016-05-25 18:24 Cevap 25 Mayıs '16, andrepo tarafından 18 : 24'te verildi 2016-05-25 18:24

İşe yarayan bir şey, ama yine de daha iyi bir çözüm olması gerektiğini düşünüyorum:

 $ git revert <commit_id> $ git reset HEAD~1 --hard 

Sadece başka bir taahhütte iptal etmek istediğiniz değişikliği bırakın, diğerlerini kontrol edin.

 $ git commit --amend // or stash and rebase to <commit_id> to amend changes 
2
14 авг. Cevap saiyancoder 14 ağustos . 2014-08-14 08:34 '14, 08:34, 2014-08-14 08:34

Aslında daha hızlı ve kolay bir şekilde etkileşimli git modunu kullanmak olduğunu düşünüyorum.

 git rebase -i head~1 

(veya baş ~ 4, ne kadar ileri gitmek istersin)

ve sonra 'pick' yerine 'edit' kullanın. Düzenlemenin ne kadar güçlü olduğunu anlamadım.

https://www.youtube.com/watch?v=2dQosJaLN18

Umarım beğenirsin.

1
19 мая '16 в 23:58 2016-05-19 23:58 Cevap Matt 19, 19, 16 23:58 at 2016-05-19 23:58

Yerel şubede değişiklikler yaptığım zaman da aynı sorunu yaşadım, sadece bir dosyayı iade etmek istedim. Benim için ne işe yaradı?

( feature / target_branch ) belirli bir dosya için geri almak istediklerim de dahil olmak üzere tüm değişikliklerimin bulunduğu yer)

( origin / feature / target_branch ) değişiklik yapmak istediğim uzak dalıdır)

( işlev / aşama , bu dosyanın tadilatı haricinde, istediğim tüm değişiklikler üzerine inşa edeceğim geçici ara şubem)

  • Menşeim / feature / target_branch adresinden yerel bir şube oluştur - buna fonksiyon / deyim adı verildi

  • Yerel yerel özellik / target_branch şubemi bir şubeyle birleştirmek

  • İşlev / deyim kontrol edilir, sonra git reset - soft ORIG_HEAD (şimdi işlev / aşamadaki tüm değişiklikler "organize edilir, ancak sabitlenmez).

  • Gereksiz değişiklikleri önceden kontrol ettiğim kaldırılmış dosya

  • İşlev / baş>

  • Kalan aşamalı değişiklikleri tekrar düzenle ve uzak kaynağım / function / target_branch için yukarı tıkla.

1
23 янв. cevap user1201303 23 jan tarafından verilmiştir . 2017-01-23 07:13 '17, 07:13 2017-01-23 07:13

İşleme henüz basmadıysanız, GitHub Desktop bu sorunu kolayca çözer:

  • Havuzu seçin → Son işlemi geri al.
  • Yanlışlıkla eklediğiniz dosyanın seçimini kaldırın. Önceki onay mesajınız zaten iletişim kutusunda olacak.
  • Beklet düğmesine basın!
1
14 марта '17 в 22:41 2017-03-14 22:41 Cevap Ron tarafından 14 Mart 17'de 22 : 41'de 2017-03-14 22:41

Artık bu dosyaya ihtiyacınız yoksa,

 git rm file git commit --amend git push origin branch 
0
29 сент. Cevap 29 Eylül tven verilir . 2017-09-29 00:49 '17, 0:49 2017-09-29 00:49

etiketleri veya soru sor ile ilgili diğer sorular