본문 바로가기
개발/Git

[Git] 파일 이동 되돌리기 - git reset, git checkout

by 윤호 2021. 1. 4.

목표

  • git restore, git checkout으로 프로젝트를 커밋 시점으로 되돌리기
  • 파일 이동으로 수정된 프로젝트를 커밋 시점으로 되돌리기

커밋된 상태인 깃 프로젝트에서 특정 파일을 옮겼을 때(modified), 프로젝트의 상태를 커밋 시점(modified 전)으로 되돌리는 방법을 알아보겠습니다.

git restore, git checkout으로 프로젝트를 커밋 시점으로 되돌리기

먼저 우리는 깃 프로젝트에서 git add와 git commit을 통해 커밋을 합니다. 그림에서 보듯이 add를 하면 working directory에 있는 파일을 staging area에 보냅니다. commit을 하면 staging area에 있는 모든 파일들을 repository에 올리게 되죠.

 

커밋 이후 파일을 수정했을 때, 수정하기 전으로 되돌려야할 경우 git checkout <파일명>으로 파일을 수정전으로 되돌리 수 있습니다. (모든 파일은 <파일명>에 <.>을 입력) 이는 working directory에 있는 파일을 수정전(unmodified) 상태로 되돌리는 명령어입니다.

 

IDE를 사용하는 경우 수정한 파일이 자동으로 add되어 staging area에 있을 수 있습니다. staging area에 있는 파일은 checkout으로 되돌릴 수 없으므로 이를 working directory로 옮기는 작업이 필요합니다. git restore --staged <파일명>으로 파일을 working directory로 옮길 수 있습니다. 이렇게 옮긴 파일을 checkout 명령어를 통해 수정전으로 되돌릴 수 있습니다.

파일 이동으로 수정된 프로젝트를 커밋 시점으로 되돌리기

커밋 이후 파일을 이동하여 modified 상태가 되었을 때, 이를 커밋 시점으로 되돌리는 방법을 알아보겠습니다.

 

먼저 커밋 이후 수정하지 않은 unmodified 상태의 파일을 이동했을 때, 깃은 해당 파일을 다음과 같이 처리합니다.

ch06 디렉토리에 있던 파일 app.js를 root 디렉토리에 옮긴 상황입니다. 저는 IDE에서 해당 파일을 자동으로 add하여staging area에 있습니다. 이를 checkout 명령어로 working directory로 옮기겠습니다.

위와 같이 두개의 파일로 나뉜 것을 볼 수 있습니다. 깃에서 파일 이동은 옮기기 전 디렉토리에 있는 파일을 삭제하고 옮긴 자리에 해당 파일을 추가한 것을 알 수 있습니다. 이때 추가된 파일은 Untracked 파일로, 깃이 변화를 추적하지 않는 파일입니다. 

 

따라서 파일 이동의 경우 restore과 checkout 명령어 만으로 원상복구 되지 않습니다. 사실 깃 프로젝트 상으론 원상 복구 되지만, undtrackted 파일이 남아있어 우리가 보는 프로젝트에선 파일 이동 전으로 돌아가지 않게 보이는 것입니다. 그러므로 restore과 checkout 명령어로 파일을 옮기기 전 위치에 생성한 다음 남아 있는 옮긴 파일은 그냥 삭제하면 원상 복구가 됩니다.

파일 이동 후
restore, checkout 명령어 입력 후
restore, checkout 명령어 입력 후
app.js 파일 삭제 후

요약

  • git restore로 add 된 파일을 add 전으로 변경
  • git checkout으로 add 되지 않은 파일을 수정 전으로 변경
  • 파일 이동의 경우 restore과 checkout으로 파일을 되돌리고, untrackted 파일은 그냥 삭제하면 됨

+ git clean -fd 명령어로 untrackted 파일을 모두 제거할 수 있습니다.

댓글