Изтриване на няколко файла от хранилището на Git, които вече са изтрити от диска

Имам Git repo, който изтрих четири файла с rm ( не git rm ) и състоянието ми Git изглежда така:

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

Как да премахнете тези файлове от Git, без да се налага да преглеждате ръчно и да добавяте всеки файл, както следва:

 git rm file1 file2 file3 file4 

В идеалния случай търся нещо, което работи точно като git add . ако е възможно.

1246
29 янв. Codebeef е определен на 29 януари 2009-01-29 20:18 '09 в 20:18 2009-01-29 20:18
@ 29 отговора

За Git 1.x

 $ git add -u 

Това означава, че Git автоматично проследява файловете, включително изтриването на предишни следени файлове.

За git 2.0

За да се изгради цялото работно дърво:

 $ git add -u :/ 

За да изпълните само текущия път:

 $ git add -u . 
2232
10 сент. отговор, даден от carl Sep 10 2009-09-10 03:13 '09 в 3:13 на 2009-09-10 03:13
 git ls-files --deleted -z | xargs -0 git rm 
border=0

може би това, което търсите ... работи ли за мен ..

1339
28 февр. Отговор, даден от Varinder на 28 февруари 2011-02-28 23:21 '11 в 23:21 ч. 2011-02-28 23:21

Можете да използвате

 git add -u 

За да добавите изтрити файлове в зоната за спиране, след това ги копирайте

 git commit -m "Deleted files manually" 
726
29 янв. Отговор, даден от Cody Caughlan на 29 януари 2009-01-29 20:25 '09 в 20:25 2009-01-29 20:25

Ако просто изпълните:

 git add -u 

git ще актуализира своя индекс, за да знае, че файловете, които сте изтрили, трябва да бъдат част от следващия коммит. След това можете да стартирате "git commit", за да потвърдите тази промяна.

Или, ако изпълнявате:

 git commit -a 

Той автоматично ще приеме тези промени (и всички други) и ще ги поправи.

Update. Ако искате само да добавите изтрити файлове, опитайте:

 git ls-files --deleted -z | xargs -0 git rm git commit 
354
10 сент. Отговорът е даден от Емил Сит 10 септември. 2009-09-10 03:15 '09 в 3:15 ч. 2009-09-10 03:15

Може да търсите -A:

 git add -A 

това е подобно на git add -u, но добавя и нови файлове. Това е приблизително еквивалентно на addremove hg addremove (въпреки че откриването на движение е автоматично).

163
29 янв. Отговорът е даден от Дъстин на 29 януари. 2009-01-29 21:10 '09 в 21:10 2009-01-29 21:10

За да подготвите само изтрити файлове:

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

Или (xargs метод):

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

Можете да използвате псевдонима на предпочитания набор от команди за удобно последващо използване.

92
26 нояб. отговорът е даден Saeb Amini 26 ноември. 2011-11-26 13:34 '11 в 13:34 2011-11-26 13:34
 git rm test.txt 

Преди или след изтриване на действителния файл.

60
10 сент. Отговор Peaker Sep 10 2009-09-10 03:13 '09 в 3:13 на 2009-09-10 03:13

Използвайки git -add с параметрите "- all" или "--update", можете да получите повече, отколкото сте искали. Нови и / или модифицирани файлове също ще бъдат добавени към индекса. Имам настройка за псевдоним bash, когато искам да изтрия изтрити файлове от git, без да докосвам други файлове:

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

Всички файлове, които са изтрити от файловата система, се добавят към индекса като изтрити.

48
31 янв. отговорът е даден zobie 31 януари 2009-01-31 07:50 '09 в 7:50 am 2009-01-31 07:50

Не че наистина има значение, но не съм съгласен с избрания отговор:

 git add -u 

... ще премахне файловете от индекса, ако съответните файлове в работното дърво са били изтрити, но също така ще бъдат подложени на модифицирано ново съдържание на контролираните файлове.

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

... от друга страна ще има само rm изтрити файлове, които са били проследени.

Така че последният, според мен, най-добрият вариант.

38
09 апр. Отговор, даден от Стефан Туал 09 април 2012-04-09 14:24 '12 в 14:24 ч. 2012-04-09 14:24

Ако това са единствените промени, които можете да направите

 git commit -a 

да извърши всички промени. Това ще включва изтрити файлове.

28
29 янв. отговорът е даден от SpoonMeiser 29 януари 2009-01-29 20:29 '09 в 20:29 2009-01-29 20:29
 git ls-files --deleted | xargs git rm 

- Най-добрият вариант за добавяне само на изтрити файлове.

Ето и някои други опции.

 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 Kurian Oct 01 2012-10-01 22:36 '12 в 22:36 ч. 2012-10-01 22:36

git add -u

-u --Update Съвпада само следените файлове в индекса, а не работното дърво. Това означава, че никога няма да създава нови файлове, но новото съдържание на наблюдаваните файлове ще бъде променено и ще премахне файловете от индекса, ако съответните файлове в работното дърво са изтрити.

Ако не, по подразбиране е "."; с други думи, актуализирайте всички наблюдавани файлове в текущата директория и нейните поддиректории.

15
26 авг. отговорът е даден Obay 26 август. 2014-08-26 15:24 '14 в 15:24 2014-08-26 15:24

Това просто решение е страхотно за мен:

 git rm $(git ls-files --deleted) 
14
06 нояб. Отговорът е даден от Husam Bdr 06 ноември. 2015-11-06 16:32 '15 в 16:32 2015-11-06 16:32

Ако искате да го добавите към своя .gitconfig , изпълнете следните стъпки:

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

Тогава всичко, което трябва да направите, е да стартирате:

 git rma 
10
25 июля '12 в 23:47 2012-07-25 23:47 отговорът е даден от Еван Моран на 25 юли '12 в 23:47 ч. 2012-07-25 23:47
 git ls-files --deleted -z | xargs -0 git rm --cached 

Това ще изтрие всички изтрити файлове, които са били проследявани преди това с помощта на git, и ще обработи случая, когато в имената ви има интервали.

В зависимост от вашата версия на POSIX, може да се наложи да използвате xargs -0 -r : това ще предизвика xargs да излезе грациозно с нулево съдържание.

EDIT: --cached и --deleted се използват в тандем за защита срещу случайно изтриване на файлове, които все още не са изтрити.

8
04 янв. Отговорът е с опасност от Мърфи 04 януари. 2014-01-04 23:34 '14 в 23:34 2014-01-04 23:34

Опитайте.

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

или

 git add --all  git commit -m "Your commit" 
6
09 марта '15 в 18:05 2015-03-09 18:05 отговорът е даден ilgam 09 март '15 в 18:05 2015-03-09 18:05

Моля, използвайте -t да видите коя команда действително се изпълнява.

Просто промених отговора на Wyrder, за да направя същото:

 git ls-files --deleted -z | xargs -t -0 git rm 
6
17 апр. Отговор, даден от Venkateswara Rao на 17 април 2016-04-17 18:00 '16 в 18:00 часа 2016-04-17 18:00 часа

Следното ще работи дори ако имате много файлове за обработка:

 git ls-files --deleted | xargs git rm 

Вероятно ще искате да оставите коментар.

Вижте още в: Полезни скриптове на Git

5
24 мая '13 в 16:45 2013-05-24 16:45 отговорът е даден l3x 24 май '13 в 16:45 2013-05-24 16:45

Нито един от флаговете в git -add няма да изтрие само изтрити файлове; ако всички променени са били изтрити файлове, тогава вие сте добре, но в противен случай трябва да изпълните git -статус и да анализирате изхода.

Разчиствайки отговора на Джереми, аз получих:

 git status | sed -s "s/^.*deleted: //" | grep "\(\#\|commit\)" -v | xargs git rm 
  • Получете състояние на файла.
  • За изтрити файлове маркирайте името на файла.
  • Изтрийте всички линии, започващи с C #, както и лентата на състоянието с думата "изтрита"; Не си спомням какво точно беше, и не е повече, така че може да се наложи да го промените за различни ситуации. Мисля, че групирането на изрази може да бъде специфично за GNU, така че ако не използвате gnutils, може да се наложи да добавите няколко реда от grep -v .
  • Прехвърляне на файлове в git rm .

Поставете това в псевдонима на черупката ...

5
26 июля '09 в 2:41 2009-07-26 02:41 отговорът е даден от Xiong Chiamiov 26 юли, '09 в 2:41 ч. 2009-07-26 02:41

Както споменах

 git add -u 

изтрива изтрити файлове за изтриване, но също така и модифицираните файлове за актуализиране.

За да забраните променените файлове, можете

 git reset HEAD <path> 

ако искате вашите ангажименти да бъдат организирани и чисти.
ЗАБЕЛЕЖКА: Може също да изтриете изтритите файлове, така че бъдете внимателни с тези заместващи символи.

4
21 февр. отговорът е даден на DarkNeuron 21 февруари. 2012-02-21 21:43 '12 в 21:43 2012-02-21 21:43
 git commit -m 'commit msg' $(git ls-files --deleted) 

Работи за мен, след като изтрих файловете.

4
05 авг. отговорът е даден Чад 05 август. 2014-08-05 17:40 '14 в 17:40 2014-08-05 17:40

Имах нужда от едно и също нещо и използвах GIT GUI "променени промени" бутон. той също добавя всичко.

И след "промяната на сцената" направих "ангажимент" ...

така че работната ми директория се изчиства отново.

3
15 нояб. отговорът е даден от Сердар на 15 ноември. 2011-11-15 17:29 '11 в 17:29 2011-11-15 17:29

Можете да използвате git add -u <filenames> да поставите само изтрити файлове.

Например, ако сте изтрили templates/*.tpl файловете, използвайте git add -u templates/*.tpl .

-u е необходим за достъп до файлове, които съществуват в хранилището, но вече не съществуват в работната директория. В противен случай по подразбиране git add ще търси файлове в работната директория и ако определите файловете, които сте изтрили там, те няма да ги намерят.

2
07 марта '13 в 4:29 2013-03-07 04:29 отговорът е даден от thomasrutter март 07 '13 в 4:29 2013-03-07 04:29

(Друга промяна)

Исках да изтрия всичко вече изтрито от дисковите файлове, но от една определена папка, оставяйки останалите папки непокътнати. Следното работи за мен:

 git ls-files --deleted | grep <folder-name> | xargs git rm 
1
23 нояб. отговор, даден град 23 ноември 2016-11-23 13:32 '16 в 1:32 ч. 2016-11-23 13:32

нещо подобно

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

може да го направи.

1
29 янв. Джереми френски отговор 29 януари 2009-01-29 20:28 '09 в 20:28 2009-01-29 20:28

Добавяне на псевдоним на система за поставяне на изтрити файлове като rm-all

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

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

забележка

Windows трябва да има инсталиран bash .

1
19 февр. Отговорът е даден от Haris Krajina на 19 февруари. 2014-02-19 15:16 '14 в 15:16 2014-02-19 15:16

За проект за визуално студио

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

което е полезно, когато пътят на отдалечения файл има интервал

0
04 февр. Отговор, даден от Сойер на 04 февруари. 2014-02-04 18:34 '14 в 18:34 2014-02-04 18:34
 git rm $(git ls-files -d) 

Премахва всички файлове, изброени от git ls-files (-d показва само изтрити файлове). Не работи за файлове с интервали в името на файла или пътя, но просто помнете

0
10 дек. отговор, даден А. Алберштейн 10 декември. 2018-12-10 11:19 '18 в 11:19 ч . 2018-12-10 11:19

Най-гъвкавото решение, което открих до момента, е

 git cola 

И изберете всички изтрити файлове, които искам да стартирам.

(Забележка. Обикновено правя всички командни редове в git, но git обработва изтритите файлове малко неудобно).

-1
03 окт. Отговорът е даден от Broes De Cat на 03 октомври. 2012-10-03 17:28 '12 в 17:28 2012-10-03 17:28

Други въпроси относно таговете или Ask a Question