Git - Staging 영역의 파일을 Untracked로 변경

git add . 명령어로 수정 파일을 Staging area로 이동시켰는데, 불필요한 파일들도 함께 Staging 영역으로 이동되어 곤란할 때가 있습니다.

이 때 git reset HEAD -- [file name] 명령어를 이용하여 Staging 영역에 있는 파일을 Unstaging 또는 Untracked 상태로 변경하여 commit 대상에서 제외시킬 수 있습니다.

1. Staging 영역에 있는 파일을 Untracked로 변경

예를 들어, aaa.java만 commit하려고 했는데, 실수로 git add . 명령어처럼 모든 파일을 Staging에 추가하였습니다. 그래서 aaa.java 뿐만 아니라 bbb.java 파일도 Staging 영역에 추가되었습니다.

$ git add .

$ git status
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	new file:   aaa.java
	new file:   bbb.java

1.1 Staged 파일을 Untracked/Unstaged 상태로 변경

이런 상황에서, git reset HEAD -- [file name] 명령어를 사용하면 bbb.java 파일을 Staging 영역에서 제거하고 Untracked 상태로 변경할 수 있습니다.

$ git reset HEAD -- bbb.java

$ git status
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	new file:   aaa.java

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	bbb.java

만약 bbb.java가 이전에 git에 반영된 파일이라면 Unstaging 상태로 변경되며, 수정 내용은 삭제되지 않고 남아있게 됩니다. git diff 명령어 입력 시, 수정사항이 남아있는 것을 볼 수 있습니다.

Commit을 하고 git log를 확인하면, bbb.java는 untracked 상태로 변경되었고, aaa.java 파일만 commit으로 반영된 것을 확인할 수 있습니다.

$ git commit -m "4th commit"
[master 2cfe425] 4th commit
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 aaa.java
$ git status
On branch master
Untracked files:
  (use "git add <file>..." to include in what will be committed)
	bbb.java

nothing added to commit but untracked files present (use "git add" to track)
$ git log --name-only
commit 2cfe42512c94252f4c8f00ddc894867eb26a936f (HEAD -> master)
Author: JS <farfs.dev@gmail.com>
Date:   Sat Jun 19 10:21:33 2021 +0900

    4th commit

aaa.java
Loading script...
codechachaCopyright ©2019 codechacha