ProgramingTip

'git reset --hard HEAD'를 사용하여 이전 커밋으로 되돌리려면 어떻게해야합니까?

bestdevel 2020. 9. 28. 09:41
반응형

'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"
    

경고 : git clean -f추적되지 않은 파일을 제거합니다. 즉, 저장소에 저장되지 않아서 갑자기 사라졌습니다. 추적되지 않은 모든 파일을 수행하기 전에 추적하는지 확인하십시오.


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

git reset --hard추적되지 않은 파일 git-clean은 제거하지, 추적 된 루트 디렉터리에서 Git 추적에 있지 않은 모든 파일을 제거합니다.

또는 @Paul Betts가 말했듯 이이 작업을 수행 할 수 있습니다 (하지만 무시 된 파일도 모두 제거됨).

  • git clean -df
  • git clean -xdf 주의! 무시 된 파일도 삭제됩니다.

참고 URL : https://stackoverflow.com/questions/9529078/how-do-i-use-git-reset-hard-head-to-revert-to-a-previous-commit

반응형