삭제 된 파일 준비


499

내 자식 저장소에 파일이 있다고 가정 해보십시오. foo .

rm(not git rm) 으로 삭제되었다고 가정하십시오 . 그런 다음 자식 상태가 표시됩니다.

Changes not staged for commit:

    deleted: foo

이 개별 파일 삭제를 어떻게 준비합니까?

내가 시도하면 :

git add foo

그것은 말한다 :

'foo' did not match any files.

2
구 Git 버전에서 문제가 되었습니까? 요즘은 하나가 아닌 것처럼 보이며 수정 된 파일과 유사하게 작동합니다.
cst1992

답변:


22

Git 2.0.0부터는 git add파일 삭제도 준비됩니다.

힘내 2.0.0 문서-git-add

<경로 사양>…

컨텐츠를 추가 할 파일입니다. 일치하는 모든 파일을 추가하기 위해 Fileglobs (예 : * .c)를 지정할 수 있습니다. 또한 디렉토리의 현재 상태와 일치하도록 색인을 업데이트하기 위해 디렉토리 이름 (예 : dir / file1 및 dir / file2를 추가하는 dir)을 지정할 수 있습니다 (예 : dir을 지정하면 수정 된 파일 dir / file1이 아니라 작업 트리에서 작업 트리에 추가 된 파일 dir / file2와 작업 트리에서 제거 된 파일 dir / file3 파일 이전 버전의 Git은 제거 된 파일을 무시하는 데 사용되었으므로 --no-all 옵션을 사용하십시오. 수정되거나 새로운 파일을 추가하고 싶지만 제거 된 파일은 무시합니다.


받아 들여진 대답은 문제를 해결하지 못하고 다른 하나는 Git 2.0.0 이후로 더 번거 롭습니다. 이것이 가장 좋은 방법입니다! 당신은 나의 공감대를
João Antunes

518

사용하다 git rm foo삭제를 위해 파일을 준비하는 데 합니다. (이것은 이전에 삭제되지 않은 경우 파일 시스템에서 파일을 삭제합니다. 물론 이전에 체크인했기 때문에 git에서 복원 할 수 있습니다.)

파일 시스템에서 파일을 삭제하지 않고 삭제를 위해 파일을 준비하려면 git rm --cached foo


8
또한 --cache저장소에서만 파일을 제거하고 파일 시스템에 손대지 않고 플래그를 추가 할 수 있습니다 .
Hauleth

이 작업을 취소하는 프로세스, 즉 삭제를 위해 파일을 스테이지 해제하는 프로세스는 무엇입니까? 가능합니까?
longda

82
실제로 OP는 already_deleted 파일 을 준비하는 방법을 물었고이 작업을 수행 할 수 있습니다 git status | grep 'deleted:' | cut -d':' -f2 | xargs -t -I {} git add -u "{}". 다른 답변은 파일 제거를 올바르게 준비하는 방법을 보여 주지만 이미 삭제 된 파일을 준비하는 방법은 아닙니다. 추신. xargs기반의 명령은 내가 직접 할 그러나 때, 우분투 12.04에 나를 위해 작동 git add -u deleted_file.txt작업 넣은 사람은 아니다 그것을. 내 자식은 1.7.9.5입니다
Dimitry K

8
@DimitryK : git rm파일 시스템에서 이미 삭제 된 파일이라도 행복하게 파일을 삭제합니다. 그리고 다른 답변에 대한 OP의 의견에서 알 수 있듯이 이미 삭제 된 특정 파일 하나를 준비하려고했습니다.
Wooble

3
git rm이미 제거 된 파일을 준비하지 않습니다. 이 오류가 발생 fatal: pathspec '~.SLDASM' did not match any files합니다. 증거가있는 화면은 다음과 같습니다. i.imgur.com/cKNKGGe.png i.imgur.com/1p9JdWF.png . 첫 번째 스크린 샷은 2 개의 파일이 삭제되어 준비되지 않았 음을 보여주고, 두 번째 스크린 샷은 입력 git rm "~$Box.SLDASM"할 때이 오류가 발생 한다는 것을 보여줍니다 .
KulaGGin

413

을 사용하는 것이 맞더라도 git rm [FILE], 또는 할 수 있습니다git add -u .

git-add설명서 에 따르면 :

-u-업데이트

[FILE]과 (와) 일치하는 항목이 이미있는 색인을 업데이트하십시오. 이렇게하면 작업 트리와 일치하도록 색인 항목이 제거 될뿐만 아니라 수정되지만 새 파일은 추가되지 않습니다.

-u 옵션을 사용할 때 [FILE]을 지정하지 않으면 전체 작업 트리에서 추적 된 모든 파일이 업데이트됩니다 (이전 버전의 Git은 업데이트를 현재 디렉토리 및 하위 디렉토리로 제한하는 데 사용됨).

인덱스가 새로 고쳐지고 파일이 올바르게 준비됩니다.


56
git add -A ., 모든 변경 사항을 추가합니다. 특히 삭제 된 파일 하나를 준비하고 싶었습니다.
Andrew Tomazos

25
수정 된 파일이 모두 추가됩니다. 삭제 된 파일 만이 아닙니다.
Foreever

3
맞아요. 보다 구체적으로, 삭제 또는 수정 여부에 관계없이 이미 추적 된 파일의 모든 변경 사항을 준비합니다. 여러 파일을 삭제하고 개별적으로 스테이지하지 않으려는 경우에 도움이됩니다.
Sailesh

9
삭제 된 파일 만 준비하고 수정하지 않는 방법이 있습니까? 그냥 궁금해서
aug

11
내가 그랬어 git add -u FolderWithDeletedFiles/그리고 내가 감사를 원하는 한
의회

158

수동으로 삭제 된 모든 파일을 준비하려면 다음을 사용할 수 있습니다.

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

이 명령에 별명을 추가하려면 git rm-deleted다음을 실행하십시오.

git config --global alias.rm-deleted '!git rm $(git ls-files --deleted)'

2
$ () 표기법은 aparently로 이어지는, 콘솔을 비난 창에 존재하지 않습니다unknown option `deleted)
펠릭스 Gagnon의-Grenier의

2
경로에 공백이 있으면 이것이 효과가 있다고 생각하지 않습니다. 적어도 내 시스템에는 없습니다 (zsh 사용).
Wil Shipley

3
나를 위해 완벽하게 일했습니다! 내가 필요한 걸 정확하게 했어 큰 감사는 여기!
RedSands

창문에서for /F %I in ('git ls-files --deleted') do git add -u %I
e는

3
공백이있는 파일 이름에는 작동하지 않으며 필요한 경우 'git add -u'가 작동합니다.
J-Dizzle

33

준비된 삭제 된 파일을 모두 추가하려면

git status -s | grep -E '^ D' | cut -d ' ' -f3 | xargs git add --all

확인 감사합니다

git status

당신은 잘 가야합니다


5
이것이 작동하는지 확인합니다. 여기 교훈이 생각하지하는 생각 rm <file>이 아니라git rm <file>
DanGordon

1
참고 : 경로에 공백이 있으면 공백을 자르면 문제가 발생합니다
davis

1
공백이있는 파일 이름에는 작동하지 않으며 필요한 경우 'git add -u'가 작동합니다.
J-Dizzle

에 완벽하게 작동합니다 git version 2.15.2 (Apple Git-101.1).
Kalob Taulien

리눅스 콘솔에서 완벽하게 작동합니다!
Ahmed AMMOURI

8

당신이 사용할 수있는

git rm -r --cached -- "path/to/directory"

삭제 된 디렉토리를 준비합니다.



0

powershell에서 git 2.x +를 사용하는 사람들을 위해 :

foreach ($filePath in (git ls-files --deleted)) { git add "$filePath" }
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.