Brisanje nekoliko datoteka iz spremišta Git koje su već izbrisane s diska

Imam Git repo da sam izbrisao četiri datoteke s rm ( ne git rm ), a moj Git status izgleda ovako:

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

Kako ukloniti te datoteke iz programa Git bez potrebe za ručnim prelaženjem i dodavanjem svake datoteke na sljedeći način:

 git rm file1 file2 file3 file4 

U idealnom slučaju, tražim nešto što funkcionira kao git add . ako je moguće.

1246
29 янв. Codebeef je postavljen 29. siječnja 2009-01-29 20:18 '09 u 20:18 2009-01-29 20:18
@ 29 odgovora

Za Git 1.x

 $ git add -u 

To znači da Git automatski prati datoteke, uključujući i brisanje prethodno snimljenih datoteka.

Za git 2.0

Za izradu cijelog radnog stabla:

 $ git add -u :/ 

Za izvršavanje samo trenutne staze:

 $ git add -u . 
2232
10 сент. odgovor dao carl ruj 10 2009-09-10 03:13 '09 u 3:13 na 2009-09-10 03:13
 git ls-files --deleted -z | xargs -0 git rm 
border=0

možda ono što tražite .. to radi za mene ..

1339
28 февр. Odgovor dao Varinder 28. veljače 2011-02-28 23:21 '11 u 23:21 2011-02-28 23:21

Možete koristiti

 git add -u 

Da biste dodali izbrisane datoteke u područje skeniranja, kopirajte ih

 git commit -m "Deleted files manually" 
726
29 янв. Odgovor dao Cody Caughlan 29. siječnja 2009-01-29 20:25 '09 u 20:25 2009-01-29 20:25

Ako pokrenete:

 git add -u 

git će ažurirati svoj indeks kako bi znao da bi izbrisane datoteke trebale biti dio sljedećeg urezivanja. Zatim možete pokrenuti "git commit" kako biste potvrdili ovu promjenu.

Ili, ako pokrenete:

 git commit -a 

On će automatski prihvatiti te promjene (i bilo koje druge) i popraviti ih.

Update. Ako samo želite dodati izbrisane datoteke, pokušajte:

 git ls-files --deleted -z | xargs -0 git rm git commit 
354
10 сент. Odgovor je dao Emil Sit 10 Sep. 2009-09-10 03:15 '09 u 3:15 2009-09-10 03:15

Možda tražite -A:

 git add -A 

ovo je slično git add -u, ali i dodaje nove datoteke. To je otprilike jednako hg addremove (iako je detekcija pokreta automatska).

163
29 янв. Odgovor je dao Dustin 29. siječnja. 2009-01-29 21:10 '09 u 21:10 2009-01-29 21:10

Za pripremu samo izbrisanih datoteka:

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

Ili (xargs metoda):

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

Možete koristiti pseudonim željenog skupa naredbi za praktičnu kasniju upotrebu.

92
26 нояб. odgovor je dan Saeb Amini 26 Nov. 2011-11-26 13:34 '11 u 13:34 2011-11-26 13:34
 git rm test.txt 

Prije ili nakon brisanja stvarne datoteke.

60
10 сент. Odgovor Peaker Sep 10 2009-09-10 03:13 '09 u 3:13 na 2009-09-10 03:13

Pomoću git -add-a s parametrima "- all" ili "--update" možete dobiti više nego što ste htjeli. U indeks će se dodati i nove i / ili izmijenjene datoteke. Imam postavke pseudonima bash kada želim izbrisati izbrisane datoteke iz git-a bez dodirivanja drugih datoteka:

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

Sve datoteke koje su izbrisane iz datotečnog sustava dodaju se indeksu kao izbrisane.

48
31 янв. odgovor je dan zobie 31. siječnja 2009-01-31 07:50 '09 u 7:50 am 2009-01-31 07:50

Nije da je doista važno, ali se ne slažem s odabranim odgovorom:

 git add -u 

... će ukloniti datoteke iz indeksa ako su odgovarajuće datoteke u radnom stablu izbrisane, ali će također biti podvrgnute izmijenjenom novom sadržaju nadziranih datoteka.

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

... s druge strane bit će samo rm izbrisanih datoteka koje su praćene.

Dakle, posljednja, po mom mišljenju, najbolja opcija.

38
09 апр. Odgovor dao Stephan Tual 09. \ T 2012-04-09 14:24 '12 u 2:24 pm 2012-04-09 14:24

Ako su to jedine promjene koje možete napraviti

 git commit -a 

za obvezivanje svih promjena. To će uključivati ​​izbrisane datoteke.

28
29 янв. odgovor je dao SpoonMeiser 29. siječnja 2009-01-29 20:29 '09 u 20:29 2009-01-29 20:29
 git ls-files --deleted | xargs git rm 

- Najbolja opcija za dodavanje samo izbrisanih datoteka.

Ovdje su neke druge opcije.

 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 окт. Odgovor dao Sijo Kurian Oct 01 2012-10-01 22:36 '12 u 22:36 2012-10-01 22:36

git add -u

-u --Update Odgovarajućim datotekama u indeksu odgovaraju samo radna stabla. To znači da nikada neće stvoriti nove datoteke, ali će se novi sadržaj nadziranih datoteka promijeniti i da će ukloniti datoteke iz indeksa ako su odgovarajuće datoteke u radnom stablu izbrisane.

Ako nije, zadana postavka je "."; drugim riječima, ažurirajte sve nadzirane datoteke u trenutnom direktoriju i njegovim poddirektorijima.

15
26 авг. odgovor je dat Obay 26 aug. 2014-08-26 15:24 '14 u 15:24 2014-08-26 15:24

Ovo jednostavno rješenje je super za mene:

 git rm $(git ls-files --deleted) 
14
06 нояб. Odgovor daje Husam Bdr 06. studenog. 2015-11-06 16:32 '15 u 16:32 2015-11-06 16:32

Ako ga želite dodati u svoj .gitconfig , slijedite ove korake:

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

Onda sve što trebate učiniti je pokrenuti:

 git rma 
10
25 июля '12 в 23:47 2012-07-25 23:47 odgovor je dao Evan Moran 25. srpnja 2012. u 23:47 2012-07-25 23:47
 git ls-files --deleted -z | xargs -0 git rm --cached 

To će izbrisati sve izbrisane datoteke koje su prethodno bile praćene pomoću git-a, a također će obraditi slučaj kada postoje razmaci u vašim imenima.

Ovisno o vašoj POSIX verziji, možda ćete morati koristiti xargs -0 -r : to će uzrokovati da xargs elegantno izađe s nultim sadržajem.

EDIT: --cached i --cached koriste se u tandemu za zaštitu od slučajnog brisanja datoteka koje još nisu izbrisane.

8
04 янв. Odgovor je dat Opasnosti Murphy 04. siječnja. 2014-01-04 23:34 '14 u 23:34 2014-01-04 23:34

Pokušajte.

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

ili

 git add --all  git commit -m "Your commit" 
6
09 марта '15 в 18:05 2015-03-09 18:05 odgovor je dan ilgam 9. ožujka '15 u 18:05 2015-03-09 18:05

Koristite -t da biste vidjeli koja se naredba zapravo izvodi.

Upravo sam promijenio Wyrder odgovor da učinim isto:

 git ls-files --deleted -z | xargs -t -0 git rm 
6
17 апр. Odgovor dao Venkateswara Rao 17. travnja 2016-04-17 18:00 '16 u 18 sati 2016-04-17 18:00

Sljedeće će raditi čak i ako imate mnogo datoteka za obradu:

 git ls-files --deleted | xargs git rm 

Vjerojatno ćete također htjeti ostaviti komentar.

Vidi više u: Korisne Git skripte

5
24 мая '13 в 16:45 2013-05-24 16:45 odgovor je dan l3x 24. svibnja '13 u 16:45 2013-05-24 16:45

Nijedna zastavica u git -add-u neće izbrisati samo izbrisane datoteke; ako su sve promijenjene izbrisane datoteke, onda ste u redu, ali u suprotnom morate pokrenuti git-status i analizirati izlaz.

Rješavajući odgovor Jeremyju, to sam dobio:

 git status | sed -s "s/^.*deleted: //" | grep "\(\#\|commit\)" -v | xargs git rm 
  • Dohvati status datoteke.
  • Za izbrisane datoteke označite naziv datoteke.
  • Izbrišite sve linije koje počinju s C #, kao i traku stanja s riječju "obrisano"; Ne sjećam se što je to, točno, i nema više, pa ćete ga možda morati promijeniti za različite situacije. Mislim da grupiranje izraza može biti GNU specifično, pa ako ne koristite gnutils, možda ćete morati dodati nekoliko redova grep -v .
  • Prijenos datoteka u git rm .

Zalijepite ovo u pseudonim ljuske ...

5
26 июля '09 в 2:41 2009-07-26 02:41 odgovor je dao Xiong Chiamiov 26. srpnja, '09 u 2:41 am 2009-07-26 02:41

Kao što je spomenuto

 git add -u 

briše izbrisane datoteke za brisanje, ALI I izmijenjene datoteke za ažuriranje.

Da biste onemogućili promijenjene datoteke, možete

 git reset HEAD <path> 

ako želite da vaše obveze budu organizirane i čiste.
NAPOMENA: Također možete izbrisati izbrisane datoteke, stoga budite oprezni s tim zamjenskim znakovima.

4
21 февр. odgovor je dan DarkNeuron 21. veljače. 2012-02-21 21:43 '12 u 21:43 2012-02-21 21:43
 git commit -m 'commit msg' $(git ls-files --deleted) 

Radilo je za mene nakon što sam izbrisao datoteke.

4
05 авг. odgovor je dat Chad 05 aug. 2014-08-05 17:40 '14 u 17:40 2014-08-05 17:40

Trebao sam istu stvar i koristio git gui "promijenjene promjene" gumb. on također dodaje sve.

I nakon "pozorišne promjene" napravio sam "počiniti" ...

tako da se moj radni imenik ponovno briše.

3
15 нояб. odgovor je dao Serdar 15. studenog. 2011-11-15 17:29 '11 u 17:29 2011-11-15 17:29

Možete koristiti git add -u <filenames> da biste postavili samo izbrisane datoteke.

Na primjer, ako ste izbrisali templates/*.tpl datoteke, koristite git add -u templates/*.tpl .

-u je potreban za pristup datotekama koje postoje u spremištu, ali više ne postoje u radnom direktoriju. U suprotnom, git add će tražiti datoteke u radnom direktoriju, a ako navedete datoteke koje ste tamo izbrisali, neće ih pronaći.

2
07 марта '13 в 4:29 2013-03-07 04:29 odgovor je dao thomasrutter 07.03.2013 u 4:29 2013-03-07 04:29

(Druga promjena)

Htjela sam izbrisati sve što je već izbrisano iz datoteka na disku, ali iz jedne određene mape, ostavljajući ostale mape netaknute. Sljedeće mi je pomoglo:

 git ls-files --deleted | grep <folder-name> | xargs git rm 
1
23 нояб. odgovor dan urban 23. \ t 2016-11-23 13:32 '16 u 13:32 2016-11-23 13:32

nešto slično

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

može to učiniti.

1
29 янв. Jeremy Francuski odgovor 29. siječnja 2009-01-29 20:28 '09 u 20:28 2009-01-29 20:28

Dodavanje pseudonima sustava stavljanju izbrisanih datoteka kao rm-all

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

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

primjedba

Windows mora imati instaliran bash .

1
19 февр. Odgovor daje Haris Krajina 19. veljače. 2014-02-19 15:16 '14 u 15:16 2014-02-19 15:16

Za projekt vizualnog studija

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

što je korisno kada put udaljene datoteke ima razmak

0
04 февр. Odgovor koji je dao Sawyer 4. veljače. 2014-02-04 18:34 '14 u 18:34 2014-02-04 18:34
 git rm $(git ls-files -d) 

Uklanja sve datoteke navedene u git ls-files (-d prikazuje samo izbrisane datoteke). Ne radi za datoteke s razmacima u nazivu datoteke ili putanji, ali samo zapamtite

0
10 дек. odgovor dati A. Albershteyn 10. prosinca. 2018-12-10 11:19 '18 u 11:19 sati 2018-12-10 11:19

Najfleksibilnije rješenje koje sam dosad pronašao jest

 git cola 

I odaberite sve izbrisane datoteke koje želim pokrenuti.

(Napomena. Obično radim sve naredbe u git-u, ali git obrađuje izbrisane datoteke pomalo nespretno).

-1
03 окт. Odgovor daje Broes De Cat 03. listopada. 2012-10-03 17:28 '12 u 17:28 2012-10-03 17:28

Ostala pitanja o oznakama ili Ask a Question