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 -u
mshameers 및/또는 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
'programing' 카테고리의 다른 글
파일 업로드 각도? (0) | 2023.06.28 |
---|---|
스프링 부트 앱에서 META-INF/MANIFEST.MF 파일을 읽는 방법은 무엇입니까? (0) | 2023.06.28 |
기본 및 하위 클래스를 사용한 Python 장치 테스트 (0) | 2023.06.28 |
복제된 원격 저장소와 원래 원격 저장소 간의 차이 (0) | 2023.06.28 |
Spring의 @Autowired를 JUNIT 5 확장에서 작동하도록 만드는 방법은 무엇입니까? (0) | 2023.06.28 |