Git

特定のファイルをGitの追跡対象から除外する方法

すでにGitで追跡されているファイルを追跡対象から除外する方法についてまとめてみました。

まだGitで一度もコミットしていないファイルであれば、.gitignore内にGitで管理したくないファイル名を追加すればいいのですが、既に一度でもコミットしてしまったファイルであれば、まずはGitの管理対象から除外する必要があります。

事前準備

まず事前準備として以下の内容を実施しておきます。

大まかな流れは、デスクトップにgitdemoというフォルダを作成し、その中でgit initをして初期化しておきます。
hello.txtファイルと.gitignoreファイルをそこに作成し、ステージした後で最初のコミットをしています。

kaz@ubuntu-server:~$ mkdir gitdemo
kaz@ubuntu-server:~$ cd gitdemo/
kaz@ubuntu-server:~/gitdemo$ git init
Initialized empty Git repository in /home/kaz/gitdemo/.git/
kaz@ubuntu-server:~/gitdemo$ echo >> .gitignore
kaz@ubuntu-server:~/gitdemo$ touch hello.txt
kaz@ubuntu-server:~/gitdemo$ git add .
kaz@ubuntu-server:~/gitdemo$ git commit -m 'first commit'
[main (root-commit) 0ebc690] first commit
 2 files changed, 1 insertion(+)
 create mode 100644 .gitignore
 create mode 100644 hello.txt

特定のファイルをGitの管理下から除く時

ここではtouchコマンドでunused.txtファイルを作成してコミットしています。

kaz@ubuntu-server:~/gitdemo$ touch unused.txt
kaz@ubuntu-server:~/gitdemo$ git status
On branch main
Untracked files:
  (use "git add <file>..." to include in what will be committed)
	unused.txt

nothing added to commit but untracked files present (use "git add" to track)
kaz@ubuntu-server:~/gitdemo$ git add .
kaz@ubuntu-server:~/gitdemo$ git commit -m 'add unused file'
[main f83af99] add unused file
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 unused.txt
kaz@ubuntu-server:~/gitdemo$ ls
hello.txt  unused.txt

vimでunused.txtファイルに適当な文字を書き込んで保存し、ステータスを確認するとgit上では当然変更したと認識されます。

kaz@ubuntu-server:~/gitdemo$ vim unused.txt
kaz@ubuntu-server:~/gitdemo$ git status
On branch main
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   unused.txt

no changes added to commit (use "git add" and/or "git commit -a")

ここでこのunused.txtファイルをgitでの管理から除外したい場合は以下のコマンドで除外します。

git rm –cached ファイル名

git statusで確認すると、unused.txtはUntracked file (gitで変更を追跡されていないファイル)になっていることがわかると思います。

kaz@ubuntu-server:~/gitdemo$ git rm --cached unused.txt
rm 'unused.txt'
kaz@ubuntu-server:~/gitdemo$ git status
On branch main
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	deleted:    unused.txt

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

余談

このままでもいいのですが、毎回git statusでUntracked filesに表示されるのは煩わしいので、こういったgitの追跡対象としないファイルは.gitignoreファイルに書き込むことでgitの追跡対象からは永久に除外する設定をします。

以下ではecho unused.txt >> .gitignoreで.gitignoreファイルに unused.txtの文字列を追加しています。
その後のgit statusではUntracked filesの項目がなくなっていることがわかります。(unused.txtがgitの追跡対象から除外された。)

kaz@ubuntu-server:~/gitdemo$ echo unused.txt >> .gitignore
kaz@ubuntu-server:~/gitdemo$ git status
On branch main
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	deleted:    unused.txt

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   .gitignore

最後に.gitignoreに文字を追加したので、この部分の変更をコミットしておきます。

kaz@ubuntu-server:~/gitdemo$ git add .
kaz@ubuntu-server:~/gitdemo$ git commit -m 'modified .gitignore'
[main 2cee5dc] modified .gitignore
 2 files changed, 1 insertion(+)
 delete mode 100644 unused.txt
kaz@ubuntu-server:~/gitdemo$ git status
On branch main
nothing to commit, working tree clean