Git에서 추적되지 않은 파일을 제거하는 방법?


110

마스터 브랜치에서 분기 한 "실험용"브랜치에서 작업 중입니다. 그런 다음 실험 브랜치에서 사용자 모델을 생성하지만 아직 인덱스에 추가하지는 않습니다.

실험용 브랜치에 최근 추가 된 파일의 모든 변경 사항을 삭제하려면 어떻게해야합니까? 추적되지 않는 파일은 다음과 같습니다.

$ git status
 On branch new_chick
 Untracked files:
   (use "git add <file>..." to include in what will be committed)

       .project
       app/models/user.rb
       db/migrate/
       test/fixtures/users.yml
       test/unit/user_test.rb

모든 변경 사항을 취소하기 위해 "git reset --hard"를 실행하려고했지만 위의 모든 파일이 여전히 표시됩니다.

누구든지 나에게 빛을 비춰주세요.


답변:


220

추적되지 않는 파일 / 디렉토리를 제거하려면 다음을 수행하십시오.

git clean -fdx

-f-힘

-d-디렉토리도

-x-무시 된 파일도 제거합니다 (무시 된 파일을 제거하지 않으려면 사용하지 마십시오)


주의해서 사용하십시오!
이 명령은 처음에는 생각하지 못했던 임의의 파일을 영구적으로 삭제할 수 있습니다. 이 답변 아래의 모든 주석과 --help 섹션 등을 다시 확인하고 읽으십시오. 모든 세부 사항을 알고 명령을 미세 조정하고 예상 결과를 확실히 얻으십시오.


54
실수로 물건을 제거하지 않도록 먼저 미리보기에 -n 추가
Druska

8
대단합니다! .gitignore에서 의도적으로 무시했지만 로컬 개발 환경에 여전히 필요한 구성 파일도 제거한다는 점을 제외하고는. git clean -fdxi와 같이 대화 형 모드에 대해 추가 -i와 함께 동일한 명령을 사용할 수 있으며 삭제할 파일을 묻는 메시지가 표시됩니다.
moeabdol

5
이것은 훌륭하지만 -x파일을 영구적으로 삭제하므로주의 하여 사용하라는 사용자에게 알림을 추가 할 수 있습니다. 또는 -n@Druska에서 언급 한대로 사용
lacostenycoder

3
-x여전히 .project를 사용하지 않았고 다른 구성 파일이 삭제되었습니다. 마지막 커밋에서 새 디렉토리로 repo를 다시 가져와야했습니다.
계시원

2
이 명령은 원하는 파일을 제거 할 수 있기 때문에 잠재적으로 위험하다는 것을 알려야한다고 생각합니다 !!!
Davide

20

사용자 상호 작용 방식 :

git clean -i -fd

Remove .classpath [y/N]? N
Remove .gitignore [y/N]? N
Remove .project [y/N]? N
Remove .settings/ [y/N]? N
Remove src/com/amazon/arsdumpgenerator/inspector/ [y/N]? y
Remove src/com/amazon/arsdumpgenerator/manifest/ [y/N]? y
Remove src/com/amazon/arsdumpgenerator/s3/ [y/N]? y
Remove tst/com/amazon/arsdumpgenerator/manifest/ [y/N]? y
Remove tst/com/amazon/arsdumpgenerator/s3/ [y/N]? y

-i for interactive
-f for force
-d for directory
-x for 무시 된 파일 (필요한 경우 추가)

참고 : 수행 할 작업을 확인하려면 -n 또는 --dry-run추가 합니다.


17

추적되지 않은 파일입니다. 이것은 git이 추적하지 않는다는 것을 의미합니다. git ignore 파일에 없기 때문에 나열하는 것뿐입니다. 그들은 git에 의해 추적되지 않기 때문에 git reset그들을 건드리지 않을 것입니다.

추적되지 않은 모든 파일을 날려 버리고 싶다면 가장 간단한 방법은 git clean -f( git clean -n실제로 아무것도 삭제하지 않고 무엇을 파괴할지 ​​보려면 대신 사용 하십시오). 그렇지 않으면 원하지 않는 파일을 직접 삭제할 수 있습니다.


5

추적되지 않는 파일 삭제 :

git clean -f

추적되지 않은 디렉토리도 삭제하려면 다음을 사용하십시오.

git clean -f -d

심장 마비를 예방하려면

git clean -n -f -d


모든 "심장 마비"😂😂😂
Rishi Kulshreshtha

2

다른 방법으로 로컬 저장소의 이전 상태로 돌아갈 수도 있습니다.

  1. 를 사용하여 추적되지 않은 파일을 준비 영역에 추가합니다 git add.
  2. 를 사용하여 로컬 저장소의 이전 상태로 돌아갑니다 git reset --hard.


0

글쎄, 나는 비슷한 문제가 있었다. 나는 최신을 가져 왔지만 특정 파일에 병합이 발생하지 않아 로컬에 약간의 변경이있었습니다. 파일이 추적되지 않았고 원하지 않았으므로 내가 한 것은-

$ git checkout 파일 경로 / 파일 이름

filepath-내가 git bash를 한 위치. 그런 다음 최신 버전을 가져 왔을 때 변경 사항을 사용할 수있었습니다.


0

git clean잘 작동 하지만 여전히 내 스크립트를 사용하여 git repo를 정리하는 것이 유용하지만 몇 가지 장점이 있습니다.

정리할 파일 목록을 표시 한 다음 정리할지 여부를 대화식으로 프롬프트합니다. 파일 당 대화식 프롬프트가 지루해지기 때문에 이것은 거의 항상 내가 원하는 것입니다.

또한 정리하고 싶지 않은 파일 유형이 있고 커밋하지 않을 이유가있을 때 유용한 목록을 수동으로 필터링 할 수 있습니다.


git_clean.sh


#!/bin/bash
readarray -t -d '' FILES < <(
    git ls-files -z --other --directory |
        grep --null-data --null -v '.bin$\|Cargo.lock$'
)
if [ "$FILES" = "" ]; then
    echo  "Nothing to clean!"
    exit 0
fi

echo "Dirty files:"
printf '  %s\n' "${FILES[@]}"

DO_REMOVE=0
while true; do
    echo ""
    read -p "Remove ${#FILES[@]} files? [y/n]: " choice
    case "$choice" in
        y|Y )
            DO_REMOVE=1
            break ;;
        n|N )
            echo "Exiting!"
            break ;;
        * ) echo "Invalid input, expected [Y/y/N/n]"
            continue ;;
    esac
done

if [ "$DO_REMOVE" -eq 1 ];then
    echo "Removing!"
    for f in "${FILES[@]}"; do
       rm -rfv "$f"
    done
fi
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.