Git əməllərindən faylları silin

Git istifadə edirəm və bəzi faylları istifadə edirəm

 git commit -a 

Daha sonra faylın səhvən törətməsinə əlavə olunduğunu kəşf etdim.

Sonuncu tirajdan fayl silmək üçün necə?

849
18 сент. Mojoy 18 sentyabrda təyin olundu. 2012-09-18 19:59 '12 at 7:59 pm 2012-09-18 19:59
@ 1 cavab

Hesab edirəm ki, buradakı digər cavablar yanlışdır, çünki yanlış sabit faylları əvvəlki fikseldən ara sahəyə geri götürərək dəyişiklikləri geri götürmədən hərəkət edir. Bu, Paritoş Singh təklif etdiyi kimi edilə bilər:

 git reset --soft HEAD^ 

və ya

 git reset --soft HEAD~1 

Onlardan tövbə etmədən onları tərk etmək üçün lazımsız faylları sıfırlayın:

 git reset HEAD path/to/unwanted_file 

İndi yenidən cəhd edin, eyni əməl mesajını yenidən istifadə edə bilərsiniz:

 git commit -c ORIG_HEAD 
1673
10 марта '13 в 13:56 2013-03-10 13:56 cavab cümə günü 10 mart 13:56 'də verilir. 2013-03-10 13:56

Diqqət ! Bir əvvəlki işinizdən bir fayl silmək və diskdə saxlamaq istəyirsinizsə, juzzlin cavabını bir az daha yüksək bir şəkildə oxuyun.

Bu sizin son işinizdirsə və faylınızı yerli və uzaq havuzdan tamamilə çıxarmaq istəyirsinizsə, aşağıdakıları edə bilərsiniz:

  • faylını git rm <file> silmək
  • dəyişdirmə bayrağı ilə git commit --amend : git commit --amend
border=0

Düzgün bir bayraq yenidən düzəltmək üçün git deyir, amma "birləşmək" (iki filial birləşməsi mənasında deyil) sonuncu düzəlişlə düzəldin.

Və yo kimi demək üçün, rm komanda git, nə özü edir!

168
18 сент. CharlesB tərəfindən verilmiş cavab 18 sentyabr. 2012-09-18 20:22 '12 at 8:22 pm 2012-09-18 20:22

Mövcud cavablar istenmeyen faylları sondan aradan qaldırmağa gəlir.

Gərəksiz faylları köhnə törətmədən (basıldığında) silmək və hərəkətə bağlı olaraq isteğe bağlı yeni bir öhdəlik yaratmaq istəmirsinizsə:

1.

Dosyanın eşleşmesini istediğiniz talebinizi tapın.

 git checkout <commit_id> <path_to_file> 

Bir çox faylları silmək istəyirsinizsə bunu bir neçə dəfə edə bilərsiniz.

2

 git commit -am "remove unwanted files" 

3

Dosyaların səhv olaraq əlavə olunduğunu , məsələn, "35c23c2" deməkdir

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

Bu əmr redaktoru parametrlərinizə uyğun olaraq açır. Sifariş vimdir.

Yanlış törətmənin növbəti xəttinə ("35c23c2" bizim vəziyyətimizdə) "lazımsız faylları silmək" lazım olan sonuncu öhdəliyə keçin və komandanı fixup olaraq fixup :

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

Dosyayı kaydettikten sonra yaxşı olmanız lazımdır.

Bitirmək üçün:

 git push -f 

Təəssüflər olsun ki, münaqişələr olsun, onları əllə həll etməliyik.

75
27 янв. 27 yanvar Brian Jan tərəfindən cavablandırıldı 2015-01-27 18:24 '15 at 18:24 2015-01-27 18:24

Rm ilə fayl silinəcəkdir!

Siz həmişə onu silmək yerinə getmək üçün bir öhdəlik əlavə edirsiniz, buna görə də faylın ilk əməlindən əvvəl bu hala qaytarılacaqsınız (bu, fayl yeni olduqda "rm" əməliyyatını siləcək) və sonra yenidən işləməyiniz və faylın gedəcəyi .

Bir faylını əvvəlki halına qaytarmaq üçün:

  git checkout <commit_id> <path_to_file> 

uzaq HEAD-da dövlətə qaytarın:

  git checkout origin/master <path_to_file> 

sonra öhdəliyi dəyişdirin və faylın siyahıdan silindiğini (və diskinizdən silinməmiş!) tapmısınız

30
28 янв. Bob Flannigon yanvarın 28-də cavab verib 2013-01-28 17:00 '13 saat 17:00 'da 2013-01-28 17:00' də

Əgər serverdə dəyişiklikləri tıklamısan, istifadə edə bilərsiniz

 git reset --soft HEAD~1 

Bütün dəyişiklikləri sıfırlayacaq və tək bir işə geri dönəcəkdir.

Değişikliklerinizi tıkladıysanız, @CharlesB'de belirtildiği şekilde aşağıdakı adımları baxın

28
18 сент. Cavab Paritoş Singh 18 sep tərəfindən verilir . 2012-09-18 21:28 '12 at 21:28 2012-09-18 21:28
 git checkout HEAD~ path/to/file git commit --amend 
27
23 авг. 23 avqustda Denis Şchepetovun verdiyi cavab 2013-08-23 22:01 '13 saat 10:01 'da 2013-08-23 22:01

Qəbul edilən cavabı göstərir ki, bütün əməlləri tərk edərək bunu edə bilərsiniz. Ancaq bu çox çətin bir yanaşma.
Bunu etmək üçün daha təmiz bir yol, tövsiyəni saxlamaq və sadəcə dəyişdirilmiş faylları silkələməkdir.

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

git reset faylı əvvəlki törətmə ilə eyni şəkildə aparacaq və onu indeksdə yaradır. Çalışan kataloqdakı fayl toxunmadı.
Sonra git commit düzəltmək və indeksin hazırkı töhfəyə sıxılmasını təmin edir.

Bu, əsasən, əvvəlki tövsiyədə olan faylın versiyasını qəbul edir və mövcud törətməyə əlavə edir. Bu şəbəkəni dəyişdirməz, beləliklə fayl effektiv olaraq işdən çıxarılır.

25
25 февр. Patrick tərəfindən 25 Fevralda cavab verildi 2017-02-25 03:06 '17 də 3:06 2017-02-25 03:06

Aşağıdakılar yalnız sizin istədiklərinizin fəslini pozacaq, hansı ki OP tələb olunur.

 git reset HEAD^ /path/to/file 

Aşağıdakı kimi bir şey görəcəksiniz ...

Yapmanız gereken dəyişikliklər: ("git sıfırlama HEAD ..." istifadə etmək üçün)

redaktə: / path / to / file

Dəyişikliklər edilmir: (nə ediləcəyini yeniləmək üçün "git add ..." istifadə edin) (iş kitabçasında dəyişiklikləri ləğv etmək üçün "git checkout -..." istifadə edin)

redaktə: / path / to / file

  • "Yapmanız gereken dəyişikliklər", törətmədən əvvəl faylın əvvəlki bir versiyasıdır. Bu fayl heç vaxt mövcud olmadıqda silinmə kimi görünür. Bu dəyişikliyi etsəniz, dəyişməni filialındakı faylya qaytaracaq bir təftiş görünür.
  • "Təqdim etmək üçün dəyişikliklər edilmir" - etdiyiniz dəyişiklik və faylın hazırki vəziyyəti

Bu nöqtədə, faylda istədiyiniz hər şeyi edə bilərsiniz, məsələn, başqa bir versiyaya sıfırlayın.

Təqib etməyə hazır olduğunuzda:

 git commit --amend -a 

və ya (başqa dəyişikliklər etmək istəmirsinizsə)

 git commit add /path/to/file git commit --amend 
24
07 дек. cavabına ThatsAMorais 07 dekabr verilir . 2014-12-07 10:13 '14 at 10:13 2014-12-07 10:13

Təqdim etməyi istəyirsən (bəlkə, bir müddət tövsiyə haqqında ətraflı mesajlar hazırlayıb və onu itirmək istəmirsiniz) və faylı yalnız sövdələşmədən silin.

 git checkout origin/<remote-branch> <filename> git commit --amend 
8
17 июня '13 в 23:07 2013-06-17 23:07 cavab mattexx 17 iyun '13 'də saat 23:07' də verilir 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" 

yerli bir fayl buraxacaq. Faylın yerli olmasını da istəmirsinizsə, - katedilen seçeneği atlayabilirsiniz.

Bütün işlər yerli şöbünüzdə olarsa, faylı daha sonra tövsiyə etməli və təmiz bir tarixə sahib kimi, bunu etmək daha asan bir yol ola bilər:

 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>^ 

asanlıqla daha mürəkkəb əmrləri yadda saxlamaq və ya mesajı düzəltmək və ya eyni sayda daxil etmədən asanlıqla yenidən başladın.

6
23 февр. Cavab 23 fevralda Bryan Buckley tərəfindən verilir . 2016-02-23 09:22 '16 saat 09:22 'da 2016-02-23 09:22

Git GUI istifadə edərək bir faylın əvvəlki törətmədən silinməsini asanlaşdıra bilər.

Bunun paylaşılan bir filial olmadığını düşünürsən və hekayə yenidən yazmağı düşünmürsən, sonra da:

 git gui citool --amend 

Səhv olaraq düzəldilmiş faylları ləğv edə və sonra "Bağlamaq" düyməsini basın.

2019

6
18 мая '15 в 22:50 2015-05-18 22:50 Cavab JDiMatteo tərəfindən 18 May '15, saat 22.50 'də verilir 2015-05-18 22:50

Aşağıdakı əmrlər 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 сент. Cavab Sergey Onishchenko tərəfindən verilir . 2015-09-10 14:51 '15 at 14:51 2015-09-10 14:51

A, B, C üç ardıcıl fiksasiya edilsin. Commit B işləməmiş bir fayl ehtiva edir.

  • $ git log # bir commmit_id edin
  • $ git rebase -i "A_ID"
  • vim rebase'də 'e' əvəzini dəyişir
  • $ git rm unwanted_file
  • $ git rebase davam edir
  • $ git push -force
3
17 авг. Moaz Rəşad tərəfindən verilmiş cavab 17 avqust. 2017-08-17 12:52 '17 at 12:52 2017-08-17 12:52

Əlavə bir əmri yerinə yetirmək məcburiyyətində qaldığım üçün ən yaxşı cavabı əlavə etmək istərdim:

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

Hooray!

3
25 мая '16 в 18:24 2016-05-25 18:24 Cavab 25 may, 16 : 18-20 2016-05-25 18:24 tarixində verilir

Mənim üçün işləyən bir şey, amma hələ də daha yaxşı bir həll olduğunu düşünürəm:

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

Başqa bir işdə ləğv etmək istədiyiniz dəyişikliyi tərk edin, digərlərini yoxlayın.

 $ git commit --amend // or stash and rebase to <commit_id> to amend changes 
2
14 авг. saiyancoder tərəfindən verilmiş cavab 14 av . 2014-08-14 08:34 '14 at 8:34 pm 2014-08-14 08:34

Əslində, düşünürəm ki, daha sürətli və asan yol interaktiv git rejimi istifadə etməkdir.

 git rebase -i head~1 

(və ya baş 4, getmək istədiyiniz nə qədər)

və 'pick' əvəzinə 'edit' istifadə edin. Mən nə qədər güclü redaktə olduğunu başa düşmədim.

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

Zövqünüzü ümid edirəm.

1
19 мая '16 в 23:58 2016-05-19 23:58 Cavab Matt 19 may, 16 saat 23:58 2016-05-19 23:58 tərəfindən verilir

Yerli şöbədə dəyişiklik olduğumda eyni problemi oldum, yalnız bir fayl qaytarmaq istədim. Mənim üçün nə işləyirdi -

( xüsusiyyət / target_branch ) mənim bütün dəyişikliklərim var, o cümlədən müəyyən bir fayl üçün geri qaytarmaq istədim)

( mənşə / xüsusiyyət / target_branch ) dəyişiklik etmək istədiyim uzaq filialdır)

( funksiya / mərhələ mənim müvəqqəti aralıq filialdır ki, mən bu dəyişikliyin istisna olmaqla istənilən dəyişikliklərimi quracağam)

  • Mənşəyim / xüsusiyyət / target_branch- dan yerli bir filial yaradın - bir funksiya / bəyanat adlandırdı

  • Mənim yerli lokal xüsusiyyətim / hədəf filialını filialla birləşdirmək

  • İşlev / bəyanat yoxlanılır, sonra sıfırlama --soft ORIG_HEAD (indi funksiyadan / mərhələdən bütün dəyişikliklər təşkil ediləcək, lakin sabit deyildir).

  • Öncədən lazımsız dəyişikliklərlə yoxladığım faylın silindi

  • İşlev / mənşə / xüsusiyyət / target_branch üçün upstream filialını dəyişdi

  • Qalan mərhələli dəyişiklikləri redaktə edin və mənim uzaq mənbəyimə / funksiyaya / hədəf_branch'a yuxarıya doğru basdıq

1
23 янв. cavab user1201303 23 yanvar tərəfindən verilir . 2017-01-23 07:13 '17 da 7:13 2017-01-23 07:13

Təqdim etmədiyiniz təqdirdə, GitHub Desktop asanlıqla bu problemi həll edir:

  • Depo seçin → Sonuncu işi geri al.
  • Səhvən əlavə etdiyiniz faylın seçimindən çıxın. Əvvəlki törətdiyiniz mesajınız artıq informasiya qutusunda olacaq.
  • Tutma düyməsini basın!
1
14 марта '17 в 22:41 2017-03-14 22:41 Cavab 14 Mart 'da 17:41' də Ron tərəfindən verilir, 2017-03-14 22:41

Artıq bu faylya ehtiyacınız yoxdursa

 git rm file git commit --amend git push origin branch 
0
29 сент. Cavab tven 29 sep verilir . 2017-09-29 00:49 '17 at 0:49 2017-09-29 00:49

etiketləri ilə bağlı digər suallar və ya bir sual verin