본문 바로가기
Git

[Git] reset restore 작업 복구 커밋 되돌리기

by 정권이 내 2024. 6. 16.

[Git] reset restore 작업 복구 커밋 되돌리기

 

git reset (작업 복구, 커밋 단위)

git 에서 파일을 수정하고 서버에 등록되기까지 아래와 같은 단계를 거치게 됩니다.

  • 작업 디렉토리 (Working Directory): 파일이 수정된 상태
  • 스테이징 영역 (Staging Area): 수정한 파일을 커밋전에 임시 저장한 상태
  • 로컬 저장소 (Local Repository): 파일을 커밋하여 로컬저장소에 등록
  • 원격 저장소 (Remote Repository): 로컬저장소의 커밋을 push 하여 원격 저장소에 등록

 

이때 커밋단위의 작업사항을 복구하려면 git reset 명령어를 이용할수 있습니다. git reset 명령은 옵션에 따라 여러가지 기능을 수행할수 있습니다.

 

reset / reset HEAD (변경사항 유지)

기본적으로 git reset 은 HEAD를 가리킵니다. 따라서 git reset HEAD 와 git reset 는 동일하게 동작합니다. 옵션을 같이 사용하지 않을경우 git reset --mixed 와 동일하게 작동합니다.

# 전체 stage 되돌리기
git reset
git reset HEAD

 

특정 커밋으로 되돌리기 (주의)

reset 사용시 특정 커밋을 지정하면 스테이징 영역에서 취소하면서 이전 커밋으로 이동하는데 파일의 변경사항은 유지되므로 특정 커밋버전으로 이동시 파일간에 충돌 가능성이 있으므로 주의 해야합니다.

git reset [commit]

 

reset --hard [commit]

--hard 옵션은 커밋, 스테이징 영역, 작업 디렉토리 에 등록된 모든 파일을 취소하면서 변경사항까지 초기화 합니다. 즉, 최신 커밋상태로 돌아가는 명령입니다. 이때 변경사항은 되돌릴수 없으므로 주의해서 사용해야 합니다.

git reset --hard
git reset --hard HEAD
git reset --hard [commit]

 

reset --mixed [commit]

--mixed 옵션은 커밋과 스테이징 영역만 취소하고 작업 디렉토리는 유지하는 명령입니다. 이때 스테이징 영역에 있던 파일들은 작업 디렉토리로 이동됩니다.

이 옵션은 reset 명령의 기본 옵션이기 때문에 --mixed 를 명시하지 않더라도 동일하게 동작합니다.

git reset --mixed
git reset --mixed HEAD
git reset --mixed [commit]

 

reset --soft [commit]

--soft 옵션은 커밋만 취소하고 스테이징 영역, 작업 디렉토리는 유지하는 명령입니다.

git reset --soft
git reset --soft HEAD
git reset --soft [commit]

 

git restore (작업 복구, 파일 단위)

git reset 명령어는 커밋 단위로 복구하지만 git restore 명령은 파일 단위로 작업을 복구할수 있습니다.

작업 변경사항을 복구할때는 restore, checkout 두가지 명령을 사용할수 있는데 restore 는 2.23.0 버전에서 새로 추가되어 파일 변경사항을 복구하거나 특정 커밋의 파일을 복구하는데 주로 사용되는 명령어 입니다.

 

restore

작업 디렉토리에 있는 파일의 변경사항을 취소합니다.

git restore <file>

 

restore --staged

스테이징 영역에 있는 파일의 변경사항을 취소합니다.

git restore --staged <file>

 

restore --source

특정 커밋에서 파일을 현재 버전으로 가져옵니다. 코드의 이전 버전에서 일부 변경사항을 다시 가져오고 싶거나, 특정 파일이 잘못 수정되었을 때 이전 상태로 되돌리고 싶을 때 유용합니다.

git restore --source <commit> <file>

 

결론

Git 에서 reset, restore 명령어는 각각의 목적과 상황에 맞게 파일과 커밋의 상태를 관리하는 강력한 도구입니다.

 

git reset

  • --soft: 커밋만 취소하고 변경사항을 스테이징 영역에 유지.
  • --mixed: 커밋을 취소하고 변경사항을 작업 디렉토리로 이동 (기본 옵션).
  • --hard: 커밋을 취소하고 변경사항을 완전히 제거.

 

git restore

  • 특정 파일의 상태를 복구하거나, 스테이징 영역에서 변경사항을 제거할 때 사용.
  • 특정 커밋의 파일을 복원할 때 유용.
반응형

'Git' 카테고리의 다른 글

Github, Git 팀 협업 Workflow 가이드  (0) 2024.11.18
git merge, 브랜치 병합 도구  (0) 2024.11.07
git stash, 작업 변경사항 임시저장 설명  (0) 2024.06.12

댓글