2012-03-02 2 views
565

Git이 내 애플리케이션에 대한 변경 사항을 추적하고 변경 사항을 적용 할 때까지 변경 사항을 유지하지만 여기서 내가 끊어진 부분은 여기에 있습니다.이전 커밋으로 되돌리려면 'git reset -hard HEAD'를 어떻게 사용합니까?

이전 커밋으로 되돌리려면 :

git reset --hard HEAD

그리고 힘내 반환

HEAD is now at 820f417 micro 

어떻게 다음 커밋 다시 그 이전에 내 하드 드라이브에있는 파일을 되돌릴 수 있습니까?

나의 다음 단계는 다음과 같다 :

git add . 
git commit -m "revert" 

그러나 파일의 아무도 내 하드 드라이브에 변경되지 않은 ...

은 내가 잘못/바로 뭐하는 거지?

+0

당신이 커밋 다시 그 이전에 내 하드 드라이브에있는 파일을 되 돌리는 의미는 무엇입니까? 820f417이 원하는 커밋이면 파일은 커밋의 정확한 내용을 갖습니다. – kennytm

+5

모든 변경 사항을 실행 취소하려면'git reset --hard' 후에'git checkout '을 실행해야합니다. – jweyrich

+7

답변이 만족스럽지 않을 때 나는 [duplicate]라는 아이디어를 얻지 못하고 새로운 질문을 던집니다. 더 많은 중복의 관점에서 재앙을위한 요리법입니다. –

답변

648

먼저 모든 커밋되지 않은 변경 사항을 버리게되므로 잠재적으로 위험한 명령임을 git reset --hard이 항상주의해야합니다. 안전을 위해 사용하기 전에 항상 git status의 출력이 깨끗한 지 (즉, 비 었는지) 확인해야합니다.

처음에 다음과 같은 말 :

그래서

나는 힘내 내가 내 응용 프로그램에 대한 변경 사항을 추적하는 것을 알고, 그리고 내가 변경 사항을 커밋 할 때까지 그들에 보유하고 있지만, 여기에 내가 전화를 끊었하고있어 어디 :

잘못된 가정을 밝혀내는 경우, 이것이 올바르지 않다고 말해야합니다. 힘내는 파일을 준비 할 때 (git add) 또는 커밋을 만들 때 파일의 상태 만 기록합니다. 특정 상태의 프로젝트 파일을 가지고있는 커밋을 생성하면 매우 안전합니다.하지만 그때까지 힘내 기는 파일에 실제로 "변경 내용을 추적하지"않습니다. (예를 들어 git add을 실행하여 새 버전의 파일을 준비한 경우에도 이전에 준비된 버전의 파일을 준비 영역에 덮어 씁니다.귀하의 질문은 다음 질문에 갈에서)

:

내가 사용하는 커밋 이전으로 되돌리려 : 자식 --hard HEAD와 자식 수익을 재설정 : HEAD가 820f417에서 지금 마이크로

어떻게 하드 드라이브의 파일을 이전 커밋으로 되돌릴 수 있습니까? 당신이 다음 git reset --hard <SOME-COMMIT>을 할 경우

힘내됩니다

  • <SOME-COMMIT>에서 (일반적으로 master) 다시 지점으로 현재의 지점을 확인합니다.
  • 그런 다음 작업 트리의 파일과 색인 ("준비 영역")을 <SOME-COMMIT>에서 커밋 된 버전과 동일하게 만듭니다. 현재 지점 (또는 현재 커미트)에

HEAD 점, 그래서 모든 git reset --hard HEAD 할 것이라는 점을 당신이 커밋되지 않은 변경을 버려야하는 것입니다.

그래서 다시 돌아가고 싶은 커밋이 f414f31이라고 가정합니다. (당신은 git log 또는 역사 브라우저를 통해 그것을 찾을 수 있습니다.) 그런 다음 당신이 원하는 정확히 무엇에 따라 몇 가지 다른 옵션이 있습니다

  • 는 이전 대신 커밋을 가리 키도록 현재 분기를 변경합니다. git reset --hard f414f31을 사용하면됩니다. 그러나이 방법은 지점의 기록을 다시 쓰는 것이므로이 지점을 다른 사람과 공유 한 경우에는 피해야합니다. 또한 f414f31 이후에 수행 한 커밋은 더 이상 master 분기의 기록에 포함되지 않습니다.
  • 프로젝트의 정확히 동일한 상태를 나타내는 새로운 커밋을 f414f31으로 만듭니다. 그러나 기록을 잃어 버리지 않도록 기록에 추가합니다. 당신은 this answer에 제안 된 단계를 사용하여 그렇게 할 수 있습니다 - 같은 :

    git reset --hard f414f31 
    git reset --soft [email protected]{1} 
    git commit -m "Reverting to the state of the project at f414f31" 
    
+0

git reset --soft HEAD @ {1}가 내 로컬 저장소를 엉망으로 만들었습니다. 그것은 모든 파일이 지금 있다고 생각합니다. 지금 무엇을해야합니까? –

+1

@ Mark Longair : 마지막에 대답하는 것은 사용자가 아니라, 단순히 git를 재설정하는 것입니다. – MiniQuark

+3

@MiniQuark : 링크 된 답변에 대한 의견에서 제안한 등가의 약간 짧은 변형을 사용하고 있습니다. –

137

경고 : git clean -f은 untracked 파일을 제거합니다. 즉, 저장소에 저장되어 있지 않기 때문에 사라진 파일을 제거합니다. 이 작업을 수행하기 전에 추적되지 않은 파일을 모두 제거해야합니다.


이 시도하고 git clean -f를 참조하십시오.

git reset --hard은 추적되지 않은 파일을 제거하지 않습니다. 여기서 git-clean은 추적 된 루트 디렉토리에서 장애물 추적 기능을 사용하지 않는 파일을 제거합니다.

@Paul Betts가 말했듯이 git clean -xdf (주의 - 모든 무시 된 파일도 삭제됨)을 수행해야합니다.

+2

이것은 터미널에서 얻은 것입니다 : ** 응용 프로그램 /보기/관계 제거 안 함/ tmp/sessions/ 제거하지 않음 tmp/sockets/** 제거 안함 변화. 흠 .. 내가하는 모든 일은 효과가없는 것처럼 보입니다. 당신의 잘못이 아닌. –

+53

git clean -xdf는 당신이 원하는 것입니다 :) –

+0

많은 시련과 대부분의 실수 끝에 새로운 앱을 만들고 모든 파일을 수동으로 백업에서로드했습니다. 나는 많은 백업을하지만 실제로 git에 의존하는 법을 배울 필요가있다. git을 더 잘 사용하는 법을 배워야 할 필요가있다. –

관련 문제