파일 상태를 Staged 에서 Unstaged로 변경하기
Staging Area는 커밋대상 파일들의 목록으로 담아두는 공간인데, git add 명령을 사용하여 등록합니다. 그런데 다음 커밋에 반영하려던 파일을 실수로 git add 해버리는 경우가 있을 수 있습니다. 이상태에서 git commit을 해버리면 그대로 해당 파일이 Git 저장소에 반영되어 버릴 것입니다.
이런 경우 Staging Area에 등록했던 파일을 워킹디렉터리로 되돌리는 방법이 있는데, git reset HEAD <파일> 명령을 사용하는 것입니다.
다음의 예제를 보면 aa 파일과 bb 파일이 있는데 aa파일은 다음 커밋에 반영하고 이번 커밋에는 bb파일만 반영하려 했습니다만 git add * 명령을 통해 실수로 두 개의 파일 모두를 Staging Area에 등록해 버렸습니다. git status로 상태를 보니 역시나 두 파일 모두 커밋 대상으로 Staged 되었습니다.
$ git add *
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: aa
modified: bb
그리고 친절하게도 도움말 아래 되돌리는 방법을 설명해 두었네요. aa 파일은 다음 커밋에 반영할 것이므로 워킹디렉터리로 되돌려 봅니다.
git reset HEAD aa 명령으로 aa파일을 워킹 Staging Area에서 다시 빼내었습니다.
$ git reset HEAD aa
Unstaged changes after reset:
M aa
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: bb
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: aa
git reset 명령어는 매우 위험한데, --hard 옵션과 사용하면 더욱 위험합니다. 그러나 옵션 없이 사용하는 경우 워킹 디렉터리의 작업 파일은 변경되지 않습니다. git reset 명령어는 다음에 더욱 자세히 알아보도록 하겠습니다.
출처 - https://git-scm.com/book/en/v2/Git-Basics-Undoing-Things
'깃(Git)' 카테고리의 다른 글
[Git] GitHub란? GitHub 가입하기 (0) | 2018.05.15 |
---|---|
[Git] 파일 수정한 내용 checkout 직후 또는 가장 최근 커밋 직후로 되돌리기 (0) | 2018.05.15 |
[Git] git commit --amend 커밋 내용 수정하기 (0) | 2018.05.14 |
[Git] git log 명령어 - 커밋 기록 보기 (0) | 2018.05.14 |
[Git] git mv 명령으로 파일 이름 변경하기 (0) | 2018.04.26 |