programing

Git 저장소에서 삭제된 여러 파일을 제거하는 방법

javajsp 2023. 6. 28. 21:20

Git 저장소에서 삭제된 여러 파일을 제거하는 방법

일부 파일을 삭제하였으며 Git 상태는 아래와 같습니다.

나는 약속하고 밀어붙였습니다.

GitHub은 저장소에서 삭제된 파일을 계속 표시합니다.GitHub 저장소의 파일을 삭제하려면 어떻게 해야 합니까?

# On branch master
# Changes not staged for commit:
#   (use "git add/rm <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   deleted:    modules/welcome/language/english/kaimonokago_lang.php
#   deleted:    modules/welcome/language/french/kaimonokago_lang.php
#   deleted:    modules/welcome/language/german/kaimonokago_lang.php
#   deleted:    modules/welcome/language/norwegian/kaimonokago_lang.php

사용할 경우git rm그것은 다음을 제공합니다.

usage: git rm [options] [--] <file>...

-n, --dry-run         dry run
-q, --quiet           do not list removed files
--cached              only remove from the index
-f, --force           override the up-to-date check
-r                    allow recursive removal
--ignore-unmatch      exit with a zero status even if nothing matched
git add -u 

모든 변경 사항 업데이트

에 대해 매우 주의하십시오.git rm .당신이 원하는 것보다 더 많이 제거할 수 있습니다.물론 복구할 수는 있지만, 그렇게 하지 않아도 되는 것이 더 간단합니다.

가장 간단한 방법은 다음과 같습니다.

git rm modules/welcome/language/english/kaimonokago_lang.php \
       modules/welcome/language/french/kaimonokago_lang.php \
       modules/welcome/language/german/kaimonokago_lang.php \
       modules/welcome/language/norwegian/kaimonokago_lang.php

파일이 없기 때문에 셸 와일드카드를 사용할 수 없지만 적어도 Bash에서는 다음을 사용할 수 있습니다.

git rm modules/welcome/language/{english,french,german,norwegian}/kaimonokago_lang.php

또는 다음을 고려합니다.

git status | sed -n '/^# *deleted:/s///p' | xargs git rm

이는 다음과 같은 결과를 가져옵니다.git status아무 하지 않습니다(기본적으아않인다습니지하쇄도로).sed -n), 시작합니다.# deleted:그것은 그것을 제거합니다.# 리고그고.deleted: 남은합니다; 그고남것인쇄니다합을은리▁and.xargs에 합니다.git rm 유사성됩니다.이름의 유사성(또는 유사성)에 관계없이 파일 수에 상관없이 사용할 수 있습니다.

ByScripts 답변의 또 다른 버전은 다음과 같습니다.

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

이렇게 하면 Git에서 삭제된 파일만 제거됩니다.

수정된 파일만 추가하는 데도 사용할 수 있습니다.

git add $(git ls-files --modified)

이러한 명령은 윈도우즈용 Gitbash에서도 작동합니다.

변경한 내용을 모두 업데이트합니다.

git add -u

삭제된 파일은 단계별(일반적으로 빨간색)에서 단계별(녹색)로 변경됩니다.그런 다음 삭제된 파일을 제거하도록 커밋합니다.

git commit -m "note"

을 스테이징하는 것에 쓰지 은 수된파스하은데해쓰책결좋가은정장우경않는 입니다.git add -umshameers 및/또는 pb2q에 의해 언급된 바와 같이.

파일만 파일은 ▁the▁if▁를 사용해야 한다고 합니다.ls-files가 붙은 --deleted 기타 인수할 필요 없음 :: " (regex /한options사를없필사/용음요할두옵션:접))▁option없▁(re음필션

git ls-files --deleted | xargs git rm

네.git rm <filename> 여기서 " "는 " " 입니다.<filename>글로벌 패턴일 수 있습니다.

$ git rm modules/welcome/language/*/kaimonokago_lang.php
rm modules/welcome/language/english/kaimonokago_lang.php
rm modules/welcome/language/french/kaimonokago_lang.php
rm modules/welcome/language/german/kaimonokago_lang.php
rm modules/welcome/language/norwegian/kaimonokago_lang.php

$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       deleted:    modules/welcome/language/english/kaimonokago_lang.php
#       ...

그런 다음 커밋할 수 있습니다.

git commit -a원하신다면 한 번에 할 겁니다

사용할 수도 있습니다.git add -u삭제된 모든 파일을 포함하여 모든 변경 사항을 준비한 다음 커밋합니다.

삭제한 파일 중 커밋할 준비가 되지 않은 파일이 많을 때는git rm다음과 같은 기능을 제공합니다.

for i in `git status | grep deleted | awk '{print $3}'`; do git rm $i; done

질문 답변자가 언급했듯이, 주의해야 합니다.git rm.

사용해 보십시오.

 git rm `git ls-files -d`

사용할 수 있습니다.

git commit -m "remove files" -a
git push

파일을 수동으로 삭제한 후

실행 시 모든 파일을 제거하는 셸 스크립트를 만들 수 있습니다.

git status | grep deleted | awk '{print "git rm " $3;}' > ../remove.sh

생성되는 스크립트는 다음과 같습니다.remove.sh그리고 그것은 전체 목록을 포함합니다.git rm명령을 실행합니다.

"gitrm"을 사용하여 모든 항목을 삭제하려는 경우.제가 하는 일은 다음과 같습니다.

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

이 쿼리는 제거된 모든 파일을 나열하고 Git 저장소에서 삭제합니다.도움이 되길 바랍니다.

git status | sed 's/^#\s*deleted:\s*//' | sed 's/^#.*//' | xargs git rm -rf

클린 기능이 내장되어 있어 도움이 될 수도 있습니다.

git clean -fd
git add -u .

git add --update .

고스트 파일을 삭제하고 이 깔끔한 명령어를 발견한 후 이 문제가 제 레포에 표시되었습니다.

git add -A

기본적으로 다음과 같습니다.git add -a그리고.git add -u결합되었지만 대소문자를 구분합니다.저는 이 멋진 링크에서 그것을 얻었습니다(이 링크는 2016년 6월 기준으로 원본이 스팸/스팸 페이지로 변환되었기 때문에 현재 archive.org 의 버전을 가리킵니다).

다음은 삭제된 파일을 탐지하고 다음 커밋의 일부로 삭제를 준비하는 방법입니다.이 스레드의 모든 솔루션은 서로 다른 장점을 가지고 있습니다.아래 솔루션은 특히 파일 이름에 공백이 있는 문제를 해결합니다.

git status --porcelain | awk '/^.D .*$/ {print $0}' | sed 's/.D \(.*\)/\1/' | tr -d '"' | xargs -I {} git rm '{}'

다음을 사용하여 실행하기 전에 git's --dry-run 옵션을 사용하여 테스트해야 합니다.

git status --porcelain | awk '/^.D .*$/ {print $0}' | sed 's/.D \(.*\)/\1/' | tr -d '"' | xargs -I {} git rm --dry-run '{}'

설명:

git status --porcelain

경로 이름에 공백이 있을 때만 발생하는 D "/폴더 경로/파일 경로"와 같은 것을 출력합니다.

awk '/^.D .*$/ {print $0}'

"D"로 시작하는 행만 일치

sed 's/ D \(.*\)/\1/'

각 문자열의 앞에서 "D"를 제거합니다.

tr -d '"'

따옴표 제거(있는 경우)

xargs -I {} git rm '{}'

공백이 있는 파일 이름을 지원하는지 확인하기 위해 파일 이름 변수를 작은 따옴표로 묶은 gitm 아래 {} 실행 파일 이름으로 정의합니다.

언급URL : https://stackoverflow.com/questions/6004453/how-to-remove-multiple-deleted-files-in-git-repository