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.