Git - Staging領域のファイルをUntrackedに変更する

git add .コマンドで修正ファイルをStaging areaに移動しましたが、不要なファイルも一緒にStaging領域に移動して困難になることがあります。

このとき git reset HEAD -- [file name] コマンドを使って Staging 領域にあるファイルを Unstaging または Untracked 状態に変更して commit ターゲットから除外することができます。

1. Staging 領域のファイルを Untracked に変更

たとえば、 aaa.javaだけをコミットしようとしましたが、誤って 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コマンドを入力すると、修正が残っていることがわかります。

コミットして 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
codechachaCopyright ©2019 codechacha