Ištrinti kelis failus iš „Git“ saugyklos, kurie jau buvo ištrinti iš disko

Turiu „Git“ repo, kurį ištrinau keturis failus su rm ( ne git rm ), o mano „Git“ būsena atrodo taip:

 # deleted: file1.txt # deleted: file2.txt # deleted: file3.txt # deleted: file4.txt 

Kaip pašalinti šiuos failus iš „Git“ nereikia rankiniu būdu pereiti ir pridėti kiekvieną failą taip:

 git rm file1 file2 file3 file4 

Idealiu atveju aš ieškau kažko, kas veikia kaip git add . jei įmanoma.

1246
29 янв. Codebeef yra nustatytas sausio 29 d 2009-01-29 20:18 '09 ne 20:18 2009-01-29 20:18
@ 29 atsakymai

Git 1.x

 $ git add -u 

Tai reiškia, kad „Git“ automatiškai seka failus, įskaitant ir anksčiau stebimų failų ištrynimą.

Git 2.0

Norėdami sukurti visą darbo medį:

 $ git add -u :/ 

Jei norite atlikti tik dabartinį kelią:

 $ git add -u . 
2232
10 сент. atsakymas, kurį pateikė carl Sep 10 2009-09-10 03:13 '09 - 2009-09-10 03:13 03:13
 git ls-files --deleted -z | xargs -0 git rm 
border=0

gal tai, ko ieškote .. tai veikia man ..

1339
28 февр. Atsakymas, kurį pateikė Varinder , vasario 28 d 2011-02-28 23:21 '11 11:21 val. 2011-02-28 23:21

Galite naudoti

 git add -u 

Jei norite įtraukti ištrintus failus į sustojimo vietą, nukopijuokite juos

 git commit -m "Deleted files manually" 
726
29 янв. Cody Caughlan atsakymas dėl sausio 29 d 2009-01-29 20:25 '09, 20:25, 2009-01-29 20:25

Jei ką tik paleisite:

 git add -u 

„git“ atnaujins savo indeksą ir sužinos, kad ištrinti failai iš tikrųjų turėtų būti kito įsipareigojimo dalis. Tada galite paleisti „git įsipareigoti“, kad patvirtintumėte šį pakeitimą.

Arba, jei paleisite:

 git commit -a 

Jis automatiškai priims šiuos pakeitimus (ir kitus) ir juos taisys.

Atnaujinti. Jei norite pridėti tik ištrintus failus, pabandykite:

 git ls-files --deleted -z | xargs -0 git rm git commit 
354
10 сент. Atsakymą pateikė Emil Sit 10 Sep. 2009-09-10 03:15 '09 3:15 am 2009-09-10 03:15

Galbūt ieškote -A:

 git add -A 

tai panaši į „git add -u“, bet taip pat prideda naujų failų. Tai maždaug atitinka „hg addremove (nors judėjimo aptikimas yra automatinis).

163
29 янв. Atsakymą Dustin pateikė sausio 29 d. 2009-01-29 21:10 '09 9:10 val. 2009-01-29 21:10

Jei norite parengti tik ištrintus failus:

 for x in $(git status | grep deleted | awk '{print $2}'); do git rm $x; done 

Arba (xargs metodas):

 git status | awk '/deleted/ {print $2}' | xargs git rm 

Patogiam vėlesniam naudojimui galite naudoti pageidaujamo komandų rinkinio pseudonimą .

92
26 нояб. atsakymas įteiktas Saeb Amini . 2011-11-26 13:34 '11, 13:34, 2011-11-26 13:34
 git rm test.txt 

Prieš arba po ištrinti faktinį failą.

60
10 сент. Atsakyti Peaker 10 rugsėjis 2009-09-10 03:13 '09 - 2009-09-10 03:13 03:13

Naudodami „git -add“ su „--all“ arba „--update“ parametrais, galite gauti daugiau nei norite. Nauji ir / arba modifikuoti failai taip pat bus įtraukti į indeksą. Aš noriu ištrinti ištrintus failus iš „git“ nepamiršdamas kitų failų:

 alias grma='git ls-files --deleted -z | xargs -0 git rm' 

Visi failai, kurie buvo ištrinti iš failų sistemos, yra įtraukti į indeksą kaip ištrinti.

48
31 янв. atsakymas pateikiamas zobie Jan 31 2009-01-31 07:50 '09 7:50 val. 2009-01-31 07:50

Ne tai, kad tai tikrai svarbu, bet nesutinku su pasirinktu atsakymu:

 git add -u 

... pašalins failus iš indekso, jei atitinkami failai darbo medyje bus ištrinti, bet taip pat bus pakoreguoti pakeistas naujas stebimų failų turinys.

 git rm $(git ls-files --deleted) 

... kita vertus, bus stebimi tik rm ištrinti failai.

Taigi, paskutinis, mano nuomone, geriausias variantas.

38
09 апр. Atsakymas, kurį pateikė Stephan Tual 09 Bal 2012-04-09 14:24 '12, 14:24 val. 2012-04-09 14:24

Jei tai yra vieninteliai pakeitimai, kuriuos galite padaryti

 git commit -a 

padaryti visus pakeitimus. Tai apims ištrintus failus.

28
29 янв. atsakymą pateikė SpoonMeiser 29 sausis 2009-01-29 20:29 '09 ne 20:29 2009-01-29 20:29
 git ls-files --deleted | xargs git rm 

- Geriausias būdas pridėti tik ištrintus failus.

Štai keletas kitų parinkčių.

 git add . => Add all (tracked and modified)/new files in the working tree. git add -u => Add all modified/removed files which are tracked. git add -A => Add all (tracked and modified)/(tracked and removed)/new files in the working tree. git commit -a -m "commit message" - Add and commit modified/removed files which are tracked. 
19
01 окт. Sijo Kuriano atsakymas spalio 01 d 2012-10-01 22:36 '12, 10:36 val. 2012-10-01 22:36

git add -u

-u - Atnaujinimas Tik susieti jau sekančius failus indekse, o ne darbo medį. Tai reiškia, kad ji niekada nesukurs naujų failų, tačiau bus pakeistas naujas stebimų failų turinys ir jis pašalins failus iš indekso, jei atitinkami failai darbo medyje bus ištrinti.

Jei ne, numatytasis yra „.“; kitaip tariant, atnaujinkite visus stebimus failus dabartiniame kataloge ir jo pakatalogiuose.

15
26 авг. atsakymas pateiktas Obay 26 rug . 2014-08-26 15:24 '14 at 15:24 2014-08-26 15:24

Šis paprastas sprendimas man yra puikus:

 git rm $(git ls-files --deleted) 
14
06 нояб. Atsakymą pateikė Husam Bdr . 2015-11-06 16:32 '15, 16:32 2015-11-06 16:32

Jei norite ją pridėti prie .gitconfig , atlikite šiuos veiksmus:

 [alias] rma = !git ls-files --deleted -z | xargs -0 git rm 

Tada viskas, ką jums reikia padaryti, yra paleisti:

 git rma 
10
25 июля '12 в 23:47 2012-07-25 23:47 atsakymą pateikė Evan Moran , liepos 25 d. 12, 23:47 2012-07-25 23:47
 git ls-files --deleted -z | xargs -0 git rm --cached 

Tai ištrins visus ištrintus failus, kurie anksčiau buvo stebimi naudojant „git“, ir taip pat tvarkykite atvejį, kai jūsų varduose yra tarpų.

Priklausomai nuo jūsų POSIX versijos, jums gali tekti naudoti xargs -0 -r : tai sukels xargs grakščiai išeiti su nuliniu turiniu.

EDIT: „ --cached ir „ --deleted naudojamos kartu, siekiant apsaugoti nuo atsitiktinių dar neištrintų failų ištrynimo.

8
04 янв. Atsakymas duotas Murphy Danger 04 Jan. 2014-01-04 23:34 '14 ne 23:34 2014-01-04 23:34

Išbandykite.

 -a --all Tell the command to automatically stage files that have been modified and deleted, but new files you have not told Git about are not affected. git add .  git commit -m -a "Your commit" 

arba

 git add --all  git commit -m "Your commit" 
6
09 марта '15 в 18:05 2015-03-09 18:05 atsakymas pateikiamas ilgam kovo 09 d., 15 val. 18:05 2015-03-09 18:05

Prašome naudoti -t kad pamatytumėte, kuri komanda iš tikrųjų veikia.

Aš ką tik pakeitiau atsakymą „Wyrder“, kad padarytumėte tą patį:

 git ls-files --deleted -z | xargs -t -0 git rm 
6
17 апр. Venkateswara Rao atsakymas, pateiktas balandžio 17 d 2016-04-17 18:00 16 val. 2016-04-17 18:00

Šie veiksmai veiks net ir tada, kai turite daug failų, kuriuos norite apdoroti:

 git ls-files --deleted | xargs git rm 

Jūs tikriausiai norėsite palikti komentarą.

Žiūrėti daugiau: Naudingi „Git“ scenarijai

5
24 мая '13 в 16:45 2013-05-24 16:45 atsakymas pateikiamas l3x gegužės 24 d. 13, 16:45 2013-05-24 16:45

Nė vienas iš „git -add“ vėliavų neištrins tik ištrintų failų; jei visi pakeitėte, buvo ištrinti failai, tada jūs gerai, bet kitaip jums reikia paleisti git-status ir analizuoti išvestį.

Atsisakydamas atsakymo į Jeremy, tai aš turėjau:

 git status | sed -s "s/^.*deleted: //" | grep "\(\#\|commit\)" -v | xargs git rm 
  • Gaukite failo būseną.
  • Ištrintiems failams pažymėkite failo pavadinimą.
  • Ištrinkite visas eilutes, prasidedančias C #, taip pat būsenos juostą su žodžiu „ištrinta“; Aš neprisimenu, kas tai buvo, ir tai nėra daugiau, todėl jums gali tekti jį pakeisti skirtingose ​​situacijose. Manau, kad išraiškų grupavimas gali būti specifinis GNU, todėl, jei nenaudojate gnutils, gali tekti pridėti keletą grep -v eilučių.
  • Perkelkite failus į git rm .

Įklijuokite jį į korpuso slapyvardį ...

5
26 июля '09 в 2:41 2009-07-26 02:41 atsakymą pateikė Xiong Chiamiov liepos 26 d., 09:41 , 2009-07-26 02:41

Kaip minėta

 git add -u 

ištrina ištrintus failus, bet Pakeisti atnaujintus failus.

Norėdami išjungti pakeistus failus, galite

 git reset HEAD <path> 

jei norite, kad jūsų įsipareigojimai būtų organizuoti ir švarūs.
PASTABA: Jis taip pat gali ištrinti ištrintus failus, todėl būkite atsargūs su šiomis vietomis.

4
21 февр. atsakymas pateikiamas „ DarkNeuron“ 21 vasario mėn. 2012-02-21 21:43 '12, 21:43, 2012-02-21 21:43
 git commit -m 'commit msg' $(git ls-files --deleted) 

Jis dirbo man po to, kai ištrinau failus.

4
05 авг. atsakymas pateikiamas Čadas 05 rug. 2014-08-05 17:40 '14, 17:40 2014-08-05 17:40

Man reikėjo to paties dalyko ir naudoju git gui "pasikeitė" mygtuką. jis taip pat priduria viską.

Ir po „etapo pakeitimo“ padariau „įsipareigojimą“ ...

todėl mano darbo katalogas vėl išvalomas.

3
15 нояб. atsakymą pateikė Serdaras lapkričio 15 d. 2011-11-15 17:29 '11, 17:29, 2011-11-15 17:29

Galite naudoti git add -u <filenames> kad galėtumėte įdėti tik ištrintus failus.

Pavyzdžiui, jei ištrynėte templates/*.tpl , naudokite git add -u templates/*.tpl .

-u reikalinga prieigai prie failų, esančių saugykloje, bet nebėra darbo aplanke. Priešingu atveju pagal nutylėjimą „ git add “ ieškos failų darbo kataloge, o jei nurodysite failus, kuriuos pašalinote, jie jų neras.

2
07 марта '13 в 4:29 2013-03-07 04:29 atsakymą pateikė thomasrutter kovo 7 d. 13 d. 4:29 2013-03-07 04:29

(Kitas pakeitimas)

Aš norėjau ištrinti viską, kas ištrinta iš disko failų, bet iš vieno konkretaus aplanko, paliekant kitus aplankus nepažeistus. Toliau dirbau man:

 git ls-files --deleted | grep <folder-name> | xargs git rm 
1
23 нояб. atsakyti, atsižvelgiant į miesto lapkričio 23 d 2016-11-23 13:32 '16, 13:32 pm 2016-11-23 13:32

kažkas panašaus

 git status | sed -s "s/^.*deleted: //" | xargs git rm 

gali tai padaryti.

1
29 янв. Jeremy Prancūzijos atsakymas sausio 29 d 2009-01-29 20:28 '09 ne 20:28 2009-01-29 20:28

Įtraukus sistemos slapyvardį, kad ištrinti failai būtų patalpinti kaip rm-all

UNIX alias rm-all='git rm $(git ls-files --deleted)'

WINDOWS doskey rm-all=bash -c "git rm $(git ls-files --deleted)"

Pastaba

„Windows“ turi būti įdiegta „ bash .

1
19 февр. Atsakymą pateikė Haris Krajina vasario 19 d. 2014-02-19 15:16 '14 at 15:16 2014-02-19 15:16

Vaizdo studijos projektui

 'git ls-files --deleted | sed 's/(.*)/"\1"/'| xargs git rm' 

kuri yra naudinga, kai nuotolinio failo kelias turi erdvę

0
04 февр. Sawyer atsakymas 04 vasario mėn. 2014-02-04 18:34 '14 at 18:34 2014-02-04 18:34
 git rm $(git ls-files -d) 

Pašalina visus failus, nurodytus git ls-files (-d rodo tik ištrintus failus). Neveikia failų, kuriuose yra tarpų failo pavadinime ar kelyje, tačiau tiesiog prisiminkite

0
10 дек. atsakymas A. Albershteyn gruodžio 10 d. 2018-12-10 11:19 '18, 11:19, 2018-12-10 11:19

Labiausiai lankstus sprendimas, kurį šiandien nustatiau, yra

 git cola 

Ir pasirinkite visus ištrintus failus, kuriuos noriu paleisti.

(Pastaba: aš paprastai atlieku visas komandų eilutes, tačiau git tvarko ištrintus failus šiek tiek nepatogiai).

-1
03 окт. Atsakymą pateikė „ Broes De Cat“ spalio 03 d. 2012-10-03 17:28 '12, 17:28, 2012-10-03 17:28

Kiti klausimai apie žymes arba Ask a Question