etc./StackOverFlow

디스크에서 이미 삭제된 Git 리포지토리에서 여러 파일 제거

청렴결백한 만능 재주꾼 2023. 4. 13. 10:23
반응형

질문자 :Codebeef


내가 사용하는 네 개의 파일을 삭제하는 힘내의 repo가 rm (안 git rm ),이처럼 내 망할 놈의 상태 외모 :

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

다음과 같이 수동으로 각 파일을 추가하지 않고도 Git에서 이러한 파일을 제거하려면 어떻게 해야 합니까?

 git rm file1 file2 file3 file4

git add . 와 같은 방식으로 작동하는 것을 찾고 있습니다. 가능하다면 그렇습니다.



Git 1.x의 경우

 $ git add -u

이것은 이전에 추적된 파일 삭제를 포함하여 추적된 파일을 자동으로 준비하도록 git에 지시합니다.

Git 2.0의 경우

전체 작업 트리를 준비하려면:

 $ git add -u :/

현재 경로만 준비하려면:

 $ git add -u .

carl

git ls-files --deleted -z | xargs -0 git rm

당신이 찾고있는 것일 수 있습니다 .. 그것은 나를 위해 작동합니다 ..


Varinder

당신이 사용할 수있는

 git add -u

삭제된 파일을 준비 영역에 추가한 다음 커밋합니다.

 git commit -m "Deleted files manually"

Cody Caughlan

단순히 실행하는 경우:

 git add -u

git은 삭제한 파일이 실제로 다음 커밋의 일부여야 한다는 것을 알기 위해 인덱스를 업데이트합니다. 그런 다음 "git commit"을 실행하여 해당 변경 사항을 확인할 수 있습니다.

또는 다음을 실행하는 경우:

 git commit -a

자동으로 이러한 변경 사항(및 기타 변경 사항)을 적용하고 커밋합니다.

업데이트 : 삭제된 파일만 추가하려면 다음을 시도하세요.

 git ls-files --deleted -z | xargs -0 git rm git commit

Emil Sit

당신은 아마 -A:

 git add -A

이것은 git add -u와 유사하지만 새 파일도 추가합니다. 이것은 hg의 addremove 명령과 거의 동일합니다(이동 감지는 자동이지만).


Dustin

삭제된 파일만 준비하려면:

 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

나중에 편리하게 사용할 수 있도록 원하는 명령 집합에 별칭을 지정할 수 있습니다.


Saeb Amini

git rm test.txt

실제 파일을 삭제하기 전이나 후에.


Peaker

'--all' 또는 '--update' 옵션과 함께 git-add를 사용하면 원하는 것보다 더 많은 것을 얻을 수 있습니다. 새 파일 및/또는 수정된 파일도 색인에 추가됩니다. 다른 파일을 건드리지 않고 git에서 삭제된 파일을 제거하려는 경우에 대한 bash 별칭 설정이 있습니다.

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

파일 시스템에서 제거된 모든 파일은 삭제된 상태로 인덱스에 추가됩니다.


zobie

그것이 정말로 중요하지는 않지만 선택한 답변에 동의하지 않습니다.

 git add -u

... 작업 트리에서 해당 파일이 제거된 경우 색인에서 파일을 제거하지만 추적된 파일의 수정된 새 내용도 준비합니다.

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

... 반면에 추적된 삭제된 파일만 RM합니다.

그래서 제 생각에는 후자가 더 나은 선택입니다.


Stephan Tual

이것이 유일한 변경 사항이라면 간단히 할 수 있습니다.

 git commit -a

모든 변경 사항을 커밋합니다. 삭제된 파일이 포함됩니다.


SpoonMeiser

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.

Sijo Kurian

자식 추가 -u

-u --update 작업 트리가 아닌 인덱스에서 이미 추적된 파일에 대해서만 일치합니다. 이는 새 파일을 준비하지 않지만 추적된 파일의 수정된 새 내용을 준비하고 작업 트리에서 해당 파일이 제거된 경우 색인에서 파일을 제거한다는 것을 의미합니다.

아니오를 지정하면 기본값은 "."입니다. 즉, 현재 디렉토리와 그 하위 디렉토리에서 추적된 모든 파일을 업데이트합니다.


Obay

그 간단한 솔루션은 저에게 잘 맞습니다.

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

Houssem Badri

.gitconfig 에 추가하려면 다음을 수행하십시오.

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

그런 다음 실행하기만 하면 됩니다.

 git rma

Evan Moran

git ls-files --deleted -z | xargs -0 git rm --cached

이것은 이전에 git이 추적한 모든 삭제된 파일을 제거하고 파일 이름에 공백이 있는 경우를 처리합니다.

xargs -0 -r 을 사용해야 할 수도 있습니다. 이렇게 하면 null 콘텐츠를 파이프할 때 xargs

편집: --cached--deleted 플래그는 아직 삭제되지 않은 파일을 실수로 삭제하는 것을 방지하기 위해 함께 사용됩니다.


jonathan3692bf

수정 및 삭제된 파일을 자동으로 준비하도록 명령에 지시하지만 Git에 알리지 않은 새 파일은 영향을 받지 않습니다.

-NS
--모두

 git add . && git commit -m -a "Your commit"

또는

 git add --all && git commit -m "Your commit"

ilgam

처리할 파일이 많은 경우에도 다음이 작동합니다.

 git ls-files --deleted | xargs git rm

당신은 또한 코멘트와 함께 커밋하고 싶을 것입니다.

자세한 내용은 유용한 Git 스크립트를 참조하십시오.


l3x

어떤 명령이 실제로 실행되고 있는지 보려면 -t 를 사용하십시오.

방금 Virender 답변을 조정하여 동일하게 수행했습니다.

 git ls-files --deleted -z | xargs -t -0 git rm

Venkateswara Rao

git-add 플래그는 제거된 파일만 준비하지 않습니다. 수정한 파일이 모두 삭제된 파일이면 문제가 없지만 git-status를 실행하고 출력을 구문 분석해야 합니다.

Jeremy의 답변을 바탕으로 내가 얻은 것은 다음과 같습니다.

 git status | sed -s "s/^.*deleted: //" | grep "\(\#\|commit\)" -v | xargs git rm
  1. 파일의 상태를 가져옵니다.
  2. 삭제된 파일의 경우 파일 이름을 분리합니다.
  3. #로 시작하는 모든 줄과 "deleted"라는 단어가 있는 상태 줄을 제거합니다. 정확히 무엇인지 기억나지 않고 더 이상 존재하지 않으므로 다른 상황에 맞게 수정해야 할 수도 있습니다. 표현식 그룹화는 GNU 고유의 기능일 수 있으므로 gnutils를 사용하지 않는 경우 여러 grep -v 행을 추가해야 할 수도 있습니다.
  4. 파일을 git rm 에 전달하십시오.

이제 이것을 쉘 별명에 붙이십시오 ...


Xiong Chiamiov

말한 바와 같이

 git add -u

삭제를 위해 제거된 파일을 준비하지만 업데이트를 위해 파일도 수정합니다.

수정된 파일을 언스테이징하려면 다음을 수행할 수 있습니다.

 git reset HEAD <path>

커밋을 정리하고 깨끗하게 유지하려는 경우.
참고: 삭제된 파일을 언스테이징할 수도 있으므로 이러한 와일드카드에 주의하십시오.


Community Wiki

git commit -m 'commit msg' $(git ls-files --deleted)

이것은 이미 파일을 삭제 한 후에 저에게 효과적이었습니다.


Chad

git rm $(git ls-files -d)

git ls-files 명령으로 나열된 모든 파일을 제거합니다(-d는 삭제된 파일만 표시). 파일 이름이나 경로에 공백이 있는 파일에는 작동하지 않지만 기억하기 쉽습니다.


A. Albershteyn

나는 같은 것이 필요했고 git gui "단계가 변경됨"버튼을 사용했습니다. 그것은 또한 모든 것을 추가합니다.

그리고 "무대 변경"후 "커밋"했습니다 ...

그래서 내 작업 디렉토리는 다시 깨끗합니다.


Community Wiki

git add -u <filenames> 를 사용하여 삭제된 파일만 준비할 수 있습니다.

예를 들어 templates/*.tpl 파일을 삭제한 경우 git add -u templates/*.tpl 합니다.

-u 는 저장소에 존재하지만 작업 디렉토리에 더 이상 존재하지 않는 파일을 참조하기 위해 필요합니다. git add 의 기본값은 작업 디렉토리에서 파일을 찾는 것이며, 거기에서 삭제한 파일을 지정하면 찾지 않습니다.


thomasrutter

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 설치되어 있어야 합니다.


Haris Krajina

(또 다른 변형)

디스크 파일에서 이미 삭제된 모든 파일을 삭제하고 하나의 특정 폴더에서만 삭제하고 다른 폴더는 그대로 두고 싶었습니다. 다음은 나를 위해 일했습니다.

 git ls-files --deleted | grep <folder-name> | xargs git rm

urban

뭔가

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

할 수 있습니다.


Jeremy French

비주얼 스튜디오 프로젝트의 경우

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

삭제된 파일 경로에 공간이 있을 때 유용합니다.


Sawyer

그냥 단순히

 git add . && git commit -m "the message for commit" && git push

Ricardolcm

지금까지 찾은 가장 유연한 솔루션은

 git cola

그리고 준비하려는 모든 삭제된 파일을 선택합니다.

(참고로 저는 일반적으로 git에서 모든 명령줄을 수행하지만 git은 제거된 파일을 약간 어색하게 처리합니다.)


Broes De Cat

출처 : http:www.stackoverflow.com/questions/492558/removing-multiple-files-from-a-git-repo-that-have-already-been-deleted-from-disk

반응형