본문 바로가기
Program Development Tips/Git

[Git] reset과 checkout의 차이점 이해하기

by Maccrey Coding 2024. 8. 23.
반응형

 

Git의 두 가지 중요한 명령어인 reset과 checkout의 차이점에 대해 알아보겠습니다.

이 두 명령어는 모두 Git의 버전 관리 시스템에서 커밋을 이동하거나 수정하는 데 사용되지만, 그 목적과 효과는 매우 다릅니다.

각각의 명령어가 어떻게 작동하는지 명확히 이해하는 것은 효율적인 버전 관리와 문제 해결에 큰 도움이 됩니다.

1. Git reset 개요

git reset은 주로 커밋 히스토리에서 HEAD를 이동시키는 데 사용됩니다.

이 명령어는 주로 로컬 저장소의 히스토리를 변경하거나 수정할 때 사용됩니다.

기본 형식

git reset [옵션] [커밋 ID]

옵션

  • --soft: HEAD를 지정된 커밋으로 이동하지만, 작업 디렉토리와 스테이징 영역은 변경하지 않습니다.
  • --mixed: HEAD를 지정된 커밋으로 이동하고, 스테이징 영역을 그 커밋 상태로 업데이트하지만, 작업 디렉토리는 그대로 유지됩니다.
  • --hard: HEAD, 스테이징 영역, 작업 디렉토리 모두를 지정된 커밋 상태로 강제로 되돌립니다. 이 옵션은 데이터 손실을 유발할 수 있으므로 주의가 필요합니다.

사용 예제

  • --soft
git reset --soft HEAD~1​

이 명령어는 현재 커밋을 기준으로 한 단계 이전 커밋으로 HEAD를 이동시키며, 스테이징 영역과 작업 디렉토리는 변경하지 않습니다.

  • --mixed
git reset --mixed HEAD~2

이 명령어는 HEAD를 두 단계 이전 커밋으로 이동시키고, 스테이징 영역은 업데이트하지만 작업 디렉토리는 그대로 둡니다.

  • --hard
git reset --hard HEAD~3

이 명령어는 HEAD를 세 단계 이전 커밋으로 이동시키고, 스테이징 영역과 작업 디렉토리 모두를 해당 커밋 상태로 강제로 되돌립니다.

2. Git checkout 개요

git checkout은 주로 브랜치를 변경하거나 특정 커밋, 파일, 또는 디렉토리 상태를 작업 디렉토리로 가져오는 데 사용됩니다. 이 명령어는 브랜치 간 전환, 특정 커밋으로 돌아가는 등의 작업을 수행할 때 유용합니다.

기본 형식

git checkout [브랜치 이름]
git checkout [커밋 ID]
git checkout [파일 경로]

사용 예제

  • 브랜치 전환
git checkout feature-branch

이 명령어는 feature-branch라는 브랜치로 이동합니다.

  • 특정 커밋으로 이동
git checkout 7f3d5a2

이 명령어는 지정된 커밋 7f3d5a2의 상태로 작업 디렉토리를 업데이트합니다. 이 상태는 ‘detached HEAD’ 상태로, 새로운 브랜치를 만들지 않으면 이후에 커밋한 내용이 사라질 수 있습니다.

  • 파일 복원
git checkout HEAD~1 -- file.txt

이 명령어는 file.txt 파일을 HEAD~1 커밋의 상태로 복원합니다.

3. reset과 checkout의 주요 차이점

  • 목적
    • reset: 주로 커밋 히스토리를 수정하거나 변경할 때 사용됩니다. HEAD, 스테이징 영역, 작업 디렉토리 등을 업데이트합니다.
    • checkout: 브랜치 전환, 특정 커밋으로 작업 디렉토리를 업데이트, 파일 복원 등의 작업에 사용됩니다.
  • 영향 범위
    • reset: 히스토리와 스테이징 영역에 직접적인 영향을 미치며, --hard 옵션을 사용할 경우 작업 디렉토리까지 영향을 미칩니다.
    • checkout: 브랜치나 커밋의 상태를 작업 디렉토리로 가져오며, 현재 브랜치와 작업 디렉토리만 영향을 미칩니다.
  • 상태
    • reset: 커밋의 위치를 변경하고 히스토리 수정 가능
    • checkout: 커밋의 상태를 작업 디렉토리에 반영하고 브랜치 이동 가능

4. 결론

Git의 reset과 checkout 명령어는 모두 버전 관리에서 중요한 역할을 하지만, 사용 목적과 결과는 크게 다릅니다.

reset은 주로 커밋 히스토리를 수정하는 데 사용되며, checkout은 브랜치 전환이나 특정 커밋의 상태를 작업 디렉토리로 가져오는 데 사용됩니다.

각 명령어의 용도와 효과를 명확히 이해하고 적절히 활용하는 것이 효율적인 버전 관리를 위해 중요합니다.

공감과 댓글은 저에게 큰 힘이 됩니다.

Starting Google Play App Distribution! "Tester Share" for Recruiting 20 Testers for a Closed Test.

 

Tester Share [테스터쉐어] - Google Play 앱

Tester Share로 Google Play 앱 등록을 단순화하세요.

play.google.com

 

반응형