git는 커밋되지 않은 또는 저장되지 않은 모든 변경 사항을 취소합니다.


834

마지막 커밋 이후 모든 변경 사항을 취소하려고합니다. 나는 시도 git reset --hard하고 git reset --hard HEAD본 후 이 게시물을 . 나는 head가 18c3773에 있다고 응답하지만 ... 내 로컬 소스를 볼 때 모든 파일이 여전히 있습니다. 내가 무엇을 놓치고 있습니까?


1
이것은 바로 Github에서에서 좋은 자원 : 힘내과 (거의) 아무것도 실행 취소 방법
jasonleonhard

이해하기 쉽고 읽기 쉬운 : git-scm.com/book/en/v2/Git-Basics-Undoing-Things
MyTitle

답변:


1620
  • 이렇게하면 준비한 모든 파일의 준비가 해제됩니다 git add.

    git reset
    
  • 커밋되지 않은 모든 로컬 변경 사항을 되돌립니다 (리포지토리에서 실행해야 함).

    git checkout .
    

    커밋되지 않은 변경 사항을 특정 파일이나 디렉토리로 되돌릴 수도 있습니다.

    git checkout [some_dir|file.txt]
    

    커밋되지 않은 모든 변경 사항을 되 돌리는 또 다른 방법은 유형이 길지만 하위 디렉토리에서 작동합니다.

    git reset --hard HEAD
    
  • 이렇게하면 추적되지 않은 모든 로컬 파일이 제거되므로 git 추적 파일 남습니다.

    git clean -fdx
    

    경고 : !로 -x 지정된 파일을 포함하여 무시 된 모든 파일도 제거합니다 .gitignore. -n삭제할 파일의 미리보기에 사용할 수 있습니다 .


요약하자면, 아래 명령을 실행하는 것은 기본적으로 git clone원래 소스에서 새로 나온 것과 동일 하지만 아무것도 다시 다운로드하지 않으므로 훨씬 빠릅니다.

git reset
git checkout .
git clean -fdx

이를위한 일반적인 사용법은 빌드 스크립트에서, 트리가 완전히 깨끗한 지 확인해야합니다. 수정 또는 로컬로 생성 된 오브젝트 파일 또는 빌드 아티팩트가없고 매우 빠르게 작동하고 재 작업하지 않도록하려는 경우 매번 전체 저장소를 복제하십시오.


@turibe 맞습니다. 다운로드 한 모든 종속성과 .idea 폴더를 제거했기 때문에 프로젝트를 여러 번 시작해야했습니다. 더 나은 솔루션이 필요합니다.
EresDev

2
@EresDev, 당신은 실행할 필요가 없습니다 git clean, 그것은 커밋되지 않은 변경을 취소하지만 추적되지 않거나 추가 된 모든 파일을 유지합니다. 그러나 추적되지 않은 파일 중 일부가 방해를받을 수 있으므로 빌드 결과에 영향을 줄 수 있습니다. 예를 들어 .idea 디렉토리가 손상된 경우 어떻게해야합니까?
mvp

git reset저장해야 할 변경 사항이 있음을 알려줍니다
Daniel Springer

1
를 실행하면 git clean -fdxmy node_modules.env, 위대한 삭제
fires3as0n

1
@ fires3as0n 다른 무엇을 기대 했습니까? 이것은 일어날 수밖에 없었다. 답변에도 경고가 있습니다.
Rishav

148

커밋되지 않은 모든 변경 사항 을 " 실행 취소 "하려면 다음을 실행하십시오.

git stash
git stash drop

추적되지 않은 파일이있는 경우 (를 실행하여 확인 git status) 다음 을 실행하여 파일을 제거 할 수 있습니다.

git clean -fdx

git stashstash @ {0} 이 될 새로운 숨김을 작성합니다 . 먼저 확인하려면 git stash list보관함 목록을 확인하기 위해 실행할 수 있습니다 . 다음과 같이 보일 것입니다 :

stash@{0}: WIP on rails-4: 66c8407 remove forem residuals
stash@{1}: WIP on master: 2b8f269 Map qualifications
stash@{2}: WIP on master: 27a7e54 Use non-dynamic finders
stash@{3}: WIP on blogit: c9bd270 some changes

각 숨김은 이전 커밋 메시지의 이름을 따서 명명됩니다.


2
실제로 좋은 솔루션이지만 git add .이전 git stash에도 커밋되지 않은 변경 사항을 표시했기 때문에 이전을 사용하여 변경 사항을 준비해야합니다.git stash
EresDev

21

도 있습니다 git stash 있는 "숨겨 놨다는"로컬 변경 더 이상 필요한 경우 나중에 다시 적용하거나 삭제할 수 있습니다 -

숨김에 대한 추가 정보


12

소스 트리를 사용하고 있습니다 .... 두 가지 간단한 단계를 통해 커밋되지 않은 모든 변경 사항을 되돌릴 수 있습니다.

1) 작업 공간 파일 상태를 재설정해야합니다.

여기에 이미지 설명을 입력하십시오 2) 모든 unstage 파일 (명령 + a)을 선택하고 마우스 오른쪽 버튼을 클릭 한 다음 제거를 선택하십시오.

여기에 이미지 설명을 입력하십시오

그것은 간단합니다 : D


재설정 한 다음 분기를 변경하고 재설정 된 분기를 리베이스하면이 문제가 발생합니다. 재설정은 유용하지만 커밋되지 않은 변경 사항을 삭제하는 데 사용해서는 안됩니다. 커밋되지 않은 변경 사항을 삭제하는 경우 숨김을 해제하고 삭제하십시오.
Dinu Nicolae

10

내가하는 일은

git add . (adding everything)
git stash 
git stash drop

짧막 한 농담: git add . && git stash && git stash drop


이것은 최고입니다
Madrugada

7

여기에 도달 git clean -f -d하여 취소 할 수 있는지 검색하는 사람들에게 이클립스 에서 생성 된 파일 에서 이 삭제

"로컬 히스토리에서 복원"을 사용하여 UI에서 동일한 작업을 수행 할 수 있습니다. 로컬 히스토리에서 복원


3
나는 투표하지 않았지만 당신의 의도는 당신의 의도에 대해 명확하지 않습니다. 답에서 첫 번째 문장을 다시 말하면 도움이 될 것입니다.
Mark Schultheiss

5

한 커밋에서 새로운 커밋으로 전환하는 상태

0. last commit,i.e. HEAD commit
1. Working tree changes, file/directory deletion,adding,modification.
2. The changes are staged in index
3. Staged changes are committed

상태 전이를위한 조치

0->1: manual file/directory operation
1->2: git add .
2->3: git commit -m "xxx"

차이점 확인

0->1: git diff
0->2: git diff --cached
0->1, and 0->2: git diff HEAD
last last commit->last commit: git diff HEAD^ HEAD

마지막 커밋으로 되돌리기

2->1: git reset
1->0: git checkout .     #only for tracked files/directories(actions include modifying/deleting tracked files/directories)
1->0: git clean -fdx     #only for untracked files/directories(action includes adding new files/directories)
2->1, and 1->0: git reset --hard HEAD

아무것도 다시 다운로드하지 않고 git clone과 동일

git reset && git checkout . && git clean -fdx

이것이 질문과 어떻게 관련되어 있는지 알 수 없습니다. 이것은 실제 물질이없는 일련의 이상한 요리법입니다.
mvp
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.