개발관련/Git

'git reset --hard HEAD'를 사용하여 이전 커밋으로 되돌리는 방법

Rateye 2021. 10. 1. 12:02
728x90
반응형
질문 : 'git reset --hard HEAD'를 사용하여 이전 커밋으로 되돌리려면 어떻게해야합니까?

나는 Git이 내 응용 프로그램에 대한 변경 사항을 추적하고 변경 사항을 커밋 할 때까지 유지한다는 것을 알고 있지만 여기에서 중단 된 부분입니다.

이전 커밋으로 되돌리려면 다음을 사용합니다.

git reset --hard HEAD

Git은 다음을 반환합니다.

HEAD is now at 820f417 micro

그런 다음 하드 드라이브의 파일을 이전 커밋으로 되돌리려면 어떻게합니까?

내 다음 단계는 다음과 같습니다.

git add .
git commit -m "revert"

하지만 내 하드 드라이브에서 변경된 파일이 없습니다 ...

내가 옳고 그름을 무엇입니까?

답변

git reset --hard 는 커밋되지 않은 모든 변경 사항을 버리기 때문에 잠재적으로 위험한 명령이라는 점에 항상 주목할 가치가 있습니다. git status 의 출력이 깨끗한 지 (즉, 비어 있는지) 확인해야합니다.

처음에는 다음과 같이 말합니다.

그래서 나는 Git이 내 애플리케이션에 대한 변경 사항을 추적하고 변경 사항을 커밋 할 때까지 유지한다는 것을 알고 있지만 여기에서 중단 된 부분입니다.

틀 렸습니다. Git은 파일을 준비 할 때 ( git add ) 또는 커밋을 생성 할 때만 파일의 상태를 기록합니다. 특정 상태의 프로젝트 파일을 포함하는 커밋을 생성 한 후에는 매우 안전하지만 그때까지는 Git이 파일의 변경 사항을 실제로 "추적"하지 않습니다. (예를 들어 git add 를 수행하더라도 준비 영역에서 해당 파일의 이전에 준비된 버전을 덮어 씁니다.)

귀하의 질문에서 다음 질문을 계속하십시오.

이전 커밋으로 되돌리려면 다음을 사용합니다. git reset --hard HEAD And git returns : HEAD is now at 820f417 micro

그런 다음 하드 드라이브의 파일을 이전 커밋으로 되돌리려면 어떻게합니까?

git reset --hard <SOME-COMMIT> 하면 Git은 다음을 수행합니다.

  • 현재 분기 (일반적으로 master <SOME-COMMIT> 을 가리 키도록합니다.
  • 그런 다음 작업 트리와 색인 ( "스테이징 영역")의 파일을 <SOME-COMMIT> 에서 커밋 된 버전과 동일하게 만드십시오.

HEAD 현재 분기 (또는 현재 커밋)를 가리 키므로 git reset --hard HEAD 가 수행하는 모든 작업은 커밋되지 않은 변경 사항을 버리는 것입니다.

따라서 돌아 가려는 좋은 커밋이 f414f31 이라고 가정합니다. git log 또는 모든 내역 브라우저를 통해 찾을 수 있습니다.) 그런 다음 정확히 수행하려는 작업에 따라 몇 가지 다른 옵션이 있습니다.

  • 대신 이전 커밋을 가리 키도록 현재 분기를 변경하십시오. git reset --hard f414f31 그렇게 할 수 있습니다. 그러나 이것은 브랜치의 히스토리를 다시 쓰는 것이므로이 브랜치를 다른 사람과 공유 한 경우에는 피해야합니다. f414f31 이후에 수행 한 커밋 master 브랜치의 기록에 포함되지 않습니다.
  • f414f31 과 정확히 동일한 프로젝트 상태를 나타내는 새 커밋을 생성하지만 기록에 추가하기 만하면 기록이 손실되지 않습니다. 이 답변 에서 제안 된 단계를 사용하여 수행 할 수 있습니다.
    git reset --hard f414f31
    git reset --soft HEAD@{1}
    git commit -m "Reverting to the state of the project at f414f31"

 

출처 : https://stackoverflow.com/questions/9529078/how-do-i-use-git-reset-hard-head-to-revert-to-a-previous-commit
728x90
반응형