git reset --hard HEAD는 추적되지 않은 파일을 남겨 둡니다.


584

내가 실행할 때 git reset --hard HEAD, 내가 이해 한대로 원래 버전의 원래 버전으로 재설정해야합니다. 불행히도, git status추적되지 않은 파일의 큰 목록을 보여 주므로 파일을 그대로 둡니다 .

git에게 "최종 풀에 있던 것을 정확히 다시 가져 오십시오.


44
git reset --hard색인을 재설정하고 추적 된 파일을 HEAD 상태로 되돌립니다. 추적되지 않은 파일 만 남겨 둡니다.
— fifigyuri

답변:


903

git clean -f -d작업 복사본에서 추적되지 않은 파일과 디렉토리를 제거 하려면 사용해야 합니다.

모든 git 서브 모듈을 포함하여 마스터로 전체 저장소를 재설정 해야하는 경우 다음 스크립트를 실행하십시오.

git reset --hard HEAD
git clean -f -d
git checkout master
git fetch origin master
git reset --hard origin/master
git pull
git submodule update
git submodule update --init --recursive
git submodule foreach git reset --hard HEAD
git submodule foreach git clean -f -d
git submodule foreach git submodule update --init --recursive
git submodule foreach git fetch
git submodule foreach git pull
git status

56
또한 -x.gitignored 파일을 제거하고 원래 상태로 돌아가려면.
— jtdubs

44
-n테스트에 추가 가 먼저 제거됩니다. 하나의 주장으로 그것들을 모두 합치십시오 :-dfn
— HyBRiD

31
나의 일반적인 명령이 git clean -qfdx여기 있습니다. 모든 것을 제거하고 조용히하십시오.
— aragaer

3
-d -f두 번 decalred 할 수 있습니다 -dff에 대한 -d -f -f이 보호의 비 추적 디렉토리를 포함한 모든 비 추적 디렉토리를 삭제합니다.
— ThorSummoner

3
@BKSpurgeon : 예, 파일을 삭제합니다. »추적되지 않은 파일을 이전과 같이« Git은 파일이 존재한다는 것을 제외하고는 추적되지 않은 파일에 대해 아무것도 모릅니다. (그들이 이후 이러한 파일의 여러 버전을 추적하지 않습니다 비 추적 ).
— knittl

60

여전히 파일을 보유하고있는 경우 :

git clean -di 더 이상 원하지 않는 파일 / 디렉토리 만 삭제할 수있는 대화 형 정리를 수행합니다.


48
git reset --hard && git clean -dfx

또는 zsh는 'gpristine'별명을 제공합니다.

alias gpristine='git reset --hard && git clean -dfx'

정말 편리합니다.

분기 저장소에서 작업하는 경우 올바른 저장소 / 분기에서 가져 와서 다시 설정하십시오.

git fetch upstream && git reset --hard upstream/master && git clean -df

8
이것이 안전한 명령이 아니라면 사과하십시오-안전하지 않으려 고 노력했습니다. 질문에 답하려고했습니다. 이것이 질문에 대한 답변인지에 대해 말씀해 주시겠습니까?
— jjnevis

3
이것은 잘 작동하며 git IMHO에 내장되어야합니다 (정기적으로 -x를 사용할지는 확실하지 않지만). 그래서 나는 github 등에 아직 동기화되지 않은 로컬 프로젝트를 진행하고 있으며 지저분한 리 팩터는 IDE 'undo'상태를 넘어선 다. 내 본능은 마지막 커밋으로 되 돌리는 것이지만 인터넷 검색은 일반적으로 마지막 커밋이 아닌 두 번째 커밋에 대한 답변에 걸립니다. 내가하고 싶은 것은 가장 최근의 커밋으로 돌아 오는 것입니다. 그렇게합니다. 더 쉬운 방법이어야합니다. 감사합니다 Linus! ;-)
— Dell Anderson

5
-xrepo를 복제 한 경우 와 같이 무시 된 파일도 삭제하기 때문에 위험 합니다. 그것이 당신이 원하는 것이라면 완벽합니다. 추적되지 않은 파일 을 삭제하려는 경우 -x옵션을 제거하면 효과적입니다.
— Emile Bergeron

2
하나님 감사합니다gpristine
— Snowcrash

2
intellij 설정을 삭제;)
— Kalpesh Soni

17

사용자 대화식 접근 방식 :

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 대화식의 경우
-f 강제의 경우
-d 디렉토리의 경우
-x 무시 된 파일의 경우 (필요한 경우 추가)

참고 : 수행 할 작업을 확인하려면 -n 또는 --dry-run 을 추가하십시오 .


4

사용할 수 있습니다 git stash. 을 지정해야합니다 --include-untracked. 그렇지 않으면 원래 문제가 발생합니다.

git stash --include-untracked

그런 다음 숨김 항목의 마지막 항목을 삭제하십시오.

git stash drop

편리한 별명을 만들고 git wipe예를 들어 다음 과 같이 호출 할 수 있습니다.

git config --global alias.wipe "! git stash -q --include-untracked && git stash drop -q"

2

당신이 찾고있는 명령은 git clean


4
다음에 설명 / 예 등을 조금 더 추가해주세요. 사용자가 무엇을하는지 이해하는 데 도움이되는 것은 무엇이며 어떤 경우에는 어떤 파라미터를 사용해야하는지 이해하십시오.
— rugk

1

git-clean 작업 트리에서 추적되지 않은 파일을 제거하는 데 사용합니다. 다음은 git clean명령 과 함께 사용할 수있는 몇 가지 옵션 (간략한 것)입니다 .

-d경로가 지정되지 않은 경우 사용하십시오. 따라서 git은 추적되지 않은 디렉토리로 재귀하여 제거합니다.

-f/--force 중첩 된 추적되지 않은 파일을 제거합니다.

-i/--interactive 수행 할 작업을 표시하고 파일을 대화식으로 정리하십시오.

-n/--dry-run 아무것도 제거하지 않고 어떻게되는지 보여줍니다.

-x 파일 무시

예 : git clean -f -d-> 현재 디렉토리의 모든 추적되지 않은 파일을 모든 서브 디렉토리에서 제거하십시오.


-16

어느 시점에서 소프트 리셋을 수행했을 수도 있습니다. 이렇게하면이 문제를 해결할 수 있습니다

git add .
git reset --hard HEAD~100
git pull

7
나는 이것이 OP가 원하는 것이라고 생각하지 않습니다. 다른 답변 중 하나가 실제로이 문제를 해결하는 방법을 훨씬 잘 보여줍니다.
— Avery

1
추가 할 파일이 많은 경우에도 느려질 수 있습니다.
— Devin G Rhode

4
전혀 관련이 없습니다.
— Azeem Hassni

1
이렇게하면 추적되지 않은 파일이 제거됩니다. 그러나 프로그래머는 누구나 해결 방법과 미소를 사용하지 않고 문제에 대한 올바른 해결책을 찾아야합니다.
— Yuresh Karunanayake
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.